【问题标题】:(React) setState() callback not firing after state change(反应)setState()回调在状态更改后未触发
【发布时间】:2017-11-27 17:24:29
【问题描述】:

我在这个项目中使用 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()
  }

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    您没有将函数传递给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))
    

    【讨论】:

    • 谢谢,您的解决方案有效!我花了太多时间看这个。我必须调用 e.persist() 才能将事件绑定到回调(对于可能遇到此问题的其他人)。我不敢相信我没有看到,再次感谢!
    猜你喜欢
    • 2020-11-06
    • 2018-12-08
    • 2017-07-23
    • 2019-07-04
    • 2021-05-02
    • 2018-04-07
    • 2021-01-28
    相关资源
    最近更新 更多