在React中setState()之后的代码会运行吗?

时间:2019-03-11 10:20:42

标签: reactjs setstate

试图了解React中setState()的工作原理。我的问题是这个。

如果我有其中一行是setState()的函数,那么在重新渲染之前,该行之后的代码行是否仍将运行?例如,在下面的代码中,

foo(value) {
     this.setState({stateValue: value});
     console.log("Stuff after setState");
}

在该代码中,console.log是否一定能运行?它在我测试时运行,但是我不确定这是否仅是因为React还没有时间重新渲染。我可以期望this.setState()之后的代码运行吗?

2 个答案:

答案 0 :(得分:6)

setStateasynchronous函数,就像将任何异步函数传递给事件循环一样,setState也传递给事件循环,执行之后的任何代码貌似。

一旦setState方法执行完毕,它将触发render方法,这是React将在文档渲染上工作的时间。

答案 1 :(得分:1)

让我们看看setState documentation

  

将setState()视为请求而不是立即更新组件的命令

     

反应不能保证状态更改立即生效

将其视为setTimeout(function test() {...}, 0);消息将被添加到队列中,test函数将在所有堆栈都为空之前不会被触发。您可以在EventLoop documentation

上找到更多信息。