为什么React setState可以是异步的?

时间:2017-04-16 15:58:11

标签: javascript reactjs asynchronous

我知道setState可以是同步的或异步的:

  

setState()不会立即改变this.state但会创建一个   待定状态转换。在调用此文件后访问this.state   方法可以返回现有值。

     

无法保证对setState的来电同步操作   并且可以批量调用以获得性能提升。

是的,我理解该函数执行一些操作:

  • 更新州的实际值
  • 根据需要使用新状态值
  • 更新虚拟和真实DOM

但我想弄清楚的是为什么这有时是同步的,有时是异步的?现场背后会发生什么?为什么它总是不能同步?

感谢。

1 个答案:

答案 0 :(得分:0)

您的状态更改可能来自多个来源(取决于您的应用),并且组件中的每个状态更改都安排在队列中。因此,如果在组件中执行this.setState(),那么它将等待,并且可以解析此组件的所有其他可能的setStates。当你执行类似this.setState({value:this.state.value + 1})之类的操作并且期望结果时,可能会发生这种情况然后这个操作正在等待解决,如果在那个等待期间另一个操作os状态发生了变化那么我们将在最新的this.stare.value上运行,导致意想不到的回报。通常情况下,当我处理基于先前状态的状态更改时,我会以这种方式改变状态:this.setState((prevState)=> prevState.value + 1)这意味着我正在调整状态我目前正在根据这个记忆状态进行修改,而不是依赖于this.state。