所以我一直在努力将回调传递给 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/