(React)setState()回调状态更改后不会触发

时间:2017-11-27 17:24:29

标签: javascript reactjs

我正在为这个项目使用React。

我需要在设置它之后直接读取状态(使用回调),但是当我使用回调将状态打印到屏幕时,我得到之前状态的值。使用devtools我可以看到状态确实发生了变化,所以这不是问题所在。我查看了文档,它说回调应该在状态改变和组件更新后触发,但我没有在组件中看到这种行为。我也没有收到任何错误消息。

以下是代码,感谢您的帮助!

onAnswerSelect = (e) => {
    const selectedAnswer = e.target.value;
    //Set the state, then simulate a click on the submit button
    this.setState(() => ({selectedAnswer}), this.simulateClick(e))
  }

simulateClick = (e) => {
    console.log(this.state.selectedAnswer)
    e.target.parentNode.parentNode.firstChild.click()
  }

1 个答案:

答案 0 :(得分:5)

您没有将函数传递给setState回调但是调用它。您可以使用bind函数传递函数和参数,如下所示

this.setState(() => ({selectedAnswer}), this.simulateClick.bind(this,e))

另一种方法是使用closure。您可以使simulateClick函数返回此类函数

simulateClick = (e) => () => {
    console.log(this.state.selectedAnswer)
    e.target.parentNode.parentNode.firstChild.click()
  }

this.setState(() => ({selectedAnswer}), this.simulateClick(e))