javascript - 如何正确调用setState(updater[,callback])中的回调?

标签 javascript reactjs callback setstate

所以我一直在努力将回调传递给 this.setState(),因为我就是这样做的:

this.setState({ anyState }, this.anyFunction()); 该函数被调用,但在状态更新后并没有真正被调用。结果,由于我也在 anyFunction 中更新了相同的 anyState,因此两个状态更新之间存在某种冲突,并且只有第一个有效。

然后我发现我必须这样做

this.setState({ anyState }, () => this.anyFunction());

或者

this.setState({ anyState }, function() { this.anyFunction() });

让事情正常进行。

为什么会这样呢?为什么我的第一种方法似乎是错误的?

最佳答案

第一种方法将调用结果传递给 this.anyFunction 作为回调。这很可能不是您想要的。

要解决此问题,您需要删除括号,即将代码更改为:

this.setState({ anyState }, this.anyFunction);

但是,这有一个问题,anyFunction 内的 this 绑定(bind)将不再指向类实例。要解决此问题,您需要将 anyFunction 声明为箭头函数或显式绑定(bind) this

关于javascript - 如何正确调用setState(updater[,callback])中的回调?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52387258/

相关文章:

javascript - MySQL循环只能删除第一条数据?

javascript - 如何在 javascript 中对用户函数进行自定义回调

javascript - 如何以 "await"为回调返回?

javascript - 如何添加req.user来获取请求

javascript - 如何修复 React Native 中的 "Tried to register two views with the same name RNGestureHandlerButton"?

安卓认证: callback isn't called

javascript - 为什么他们的数据看起来是同步的?

javascript - 将所有出现的自定义标签替换为其中的 URL [JS]

javascript - 为每个用户分配一种颜色

javascript - Typescript - 没有参数类型为 'string' 的索引签名