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

10-05 20:57
查看更多