【发布时间】:2018-09-18 13:04:06
【问题描述】:
所以我一直在努力将回调传递给this.setState(),因为我是这样做的:
this.setState({ anyState }, this.anyFunction());
该函数被调用,但在状态更新后并没有真正调用它。结果,由于我也在我的anyFunction 中更新了相同的anyState,所以两个状态更新之间存在某种冲突,只有第一个有效。
然后我发现我必须这样做
this.setState({ anyState }, () => this.anyFunction());
要么
this.setState({ anyState }, function() { this.anyFunction() });
让事情正常进行。
为什么会这样?为什么我的第一种方法似乎是错误的?
【问题讨论】:
-
this.anyFunction()执行函数。() => this.anyFunction()延迟函数执行。因为setState需要一个回调,那么你应该给它一个函数引用,而不是通过this.anyFunction()立即执行函数,它将传入this.anyFunction的返回值,或者undefined如果没有显式return声明。 -
我猜我会说你一直在调用函数,而不是在
this.setState({ anyState }, this.anyFunction());中传递对它的引用 -
"如何正确调用回调" - 这正是问题所在。你应该传递一个回调函数,你应该不要自己调用它。
-
谢谢@vlaz,清澈如水。如果可以的话,把它作为答案,然后我可以验证它。现在更清楚了!
标签: javascript reactjs callback setstate