反应路由器和setState冲突

时间:2018-07-17 07:41:55

标签: javascript reactjs ecmascript-6

这是保存吗?因为setState是异步的,所以this.props.history推送会忽略setState吗?

if (id) {
    this.props.history.push(`/edit/${data.id}`)

  this.setState({
    showMsg: 'saved'
  })
}

还是我应该这样做?

if (id) {
  this.setState({
    showMsg: 'saved'
  }, ()=>this.props.history.push(`/edit/${data.id}`))
}

1 个答案:

答案 0 :(得分:2)

setState方法的第二个参数是一个回调,它将不接受它作为参数。

更改此

  if (id) {
      this.setState({
        showMsg: 'saved'
      }, this.props.history.push(`/edit/${data.id}`))
    }

对此

if (id) {
  this.setState({
    showMsg: 'saved'
  },()=> this.props.history.push(`/edit/${data.id}`))
}
  

这是保存吗?

是的,当您设置状态并设置一次时;你通过回调。设置状态后,它将推送到历史记录。