所以我一直在努力将回调传递给this.setState()
,因为我这样做是:this.setState({ anyState }, this.anyFunction());
该函数已被调用,但在状态更新后才真正被调用。结果,由于我还在我的anyState
中更新相同的anyFunction
,所以两个状态更新之间存在某种冲突,并且只有第一个有效。
然后我发现我必须做this.setState({ anyState }, () => this.anyFunction());
要么this.setState({ anyState }, function() { this.anyFunction() });
使事情正常进行。
为什么这样 ?为什么我的第一种方法不对?
最佳答案
在第一个示例中,您将函数的结果用作第二个参数。
说this.anyFunction
返回常量"some_text"
,使用
this.setState({ anyState }, this.anyFunction());
与使用相同
this.setState({ anyState }, "some_text");
在第二个示例中,您实际上正在传递一个回调。或函数作为参数。该函数尚未执行,它将在setState()的末尾执行。
有关异步编程和回调的更多信息,您可以观看此谈话:https://javascript-conference.com/javascriptecmascript/asynchronicity-concurrency/