【问题标题】:React setstate method's callback is not firedReact setstate 方法的回调未触发
【发布时间】:2023-03-29 16:19:01
【问题描述】:

我有一个关于 React 中 set state 的回调函数的奇怪问题。在 React 15 中一切正常,但是一旦我将反应版本升级到 16,设置状态的回调函数就不会被触发。我几乎尝试了所有方法,但无法清楚地找出导致此问题的原因。

我尝试在构造函数中绑定函数,在 set state 方法中使用匿名函数,但它们都没有真正起作用。

然后我尝试将 react 版本降级回 15 并运行项目,我能够触发回调方法(通过在回调函数中放置一个警报框进行测试)。

这是我在示例项目中使用的确切代码:

这个函数在按钮点击时被调用

incrementCounter() {
    this.setState({
        currentCount: this.state.currentCount + 1
    }, this.callbackfuncsajad.bind(this));
}

这是设置状态的回调函数

callbackfuncsajad = () => {
    alert('in the callback');
}

这是我的 package.json 来检查是否有任何版本不匹配:

  • “反应”:“^15.6.2”
  • “react-dom”:“^16.6.3”
  • “@types/react”:“^15.0.35”
  • “@types/react-dom”:“^15.5.8”
  • “打字稿”:“2.4.1”

附带说明: 我正在为我的项目使用 Visual Studio 2017 ASP.NET 的默认 React.JS 模板。该项目默认带有 React 15 和 typescript。

如果有人能解决这个问题,那将是一个很大的帮助。

谢谢。

【问题讨论】:

  • 你可以尝试在构造函数中将该函数绑定到 this 并将其作为回调传递
  • 请提供stackoverflow.com/help/mcve。不知道如何使用 incrementCounter。 this 可能已经错了。
  • reactreact-dom 的版本不匹配。请保持reactreact-dom 的版本相同。如果你想使用最新版本的 react 就保留"react": "16.6.3""react-dom": "16.6.3"
  • @klvenky 回调是一个箭头函数,所以不需要bind

标签: javascript asp.net reactjs callback setstate


【解决方案1】:

您好,我认为这是由于父上下文,所以尝试这样的事情。

incrementCounter() {
this.setState({
    currentCount: this.state.currentCount + 1
}, () => { this.callbackfuncsajad() });

}

希望对您有所帮助。 如果您仍然遇到此问题,请分享代码以进行适当的扣除。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    • 2019-08-08
    • 2018-06-24
    • 2011-06-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多