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

Javascript 为什么React setState可以是异步的?,javascript,reactjs,asynchronous,Javascript,Reactjs,Asynchronous,我知道setState可以是同步的,也可以是异步的: setState()不会立即改变此.state,但会创建一个 等待状态转换。调用此函数后访问此.state 方法可能返回现有值 无法保证对setState 为了提高性能,可以对调用进行批处理 对,我理解函数执行一些事情: 更新状态中的实际值 根据需要使用新的状态值更新虚拟和真实DOM 但我想弄明白的是,为什么有时候是同步的,有时候是异步的?幕后发生了什么?为什么它不能总是同步的 谢谢。您的状态更改可能来自多个来源(取决于您的应用程序),组

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

setState()
不会立即改变此.state,但会创建一个 等待状态转换。调用此函数后访问此.state 方法可能返回现有值

无法保证对
setState
为了提高性能,可以对调用进行批处理

对,我理解函数执行一些事情:

  • 更新状态中的实际值
  • 根据需要使用新的状态值更新虚拟和真实DOM
但我想弄明白的是,为什么有时候是同步的,有时候是异步的?幕后发生了什么?为什么它不能总是同步的


谢谢。

您的状态更改可能来自多个来源(取决于您的应用程序),组件中的每个状态更改都安排在一个队列中。因此,如果您在组件中执行this.setState(),那么它将等待,并为要解析的组件分配所有其他潜在的setState。当您执行类似的操作.setState({value:this.state.value+1})并期望结果时,可能会发生这种情况,然后此操作正在等待解决,如果在此等待期间发生了另一个操作系统状态更改,则我们将对最新的this.stare.value进行操作,从而导致意外的返回。通常,当我处理基于先前状态的状态更改时,我会以这种方式更改状态:this.setState((prevState)=>prevState.value+1)这意味着我正在复制当前的状态,并根据此记忆状态进行修改,而不必依赖此.state。

您的状态更改可能来自多个来源(取决于您的应用程序),并且组件中的每个状态更改都安排在一个队列中。因此,如果您在组件中执行this.setState(),那么它将等待,并为要解析的组件分配所有其他潜在的setState。当您执行类似的操作.setState({value:this.state.value+1})并期望结果时,可能会发生这种情况,然后此操作正在等待解决,如果在此等待期间发生了另一个操作系统状态更改,则我们将对最新的this.stare.value进行操作,从而导致意外的返回。通常,当我处理基于先前状态的状态更改时,我会以这种方式更改状态:this.setState((prevState)=>prevState.value+1)这意味着我正在复制当前的状态,并根据此记忆状态进行修改,而不必依赖此.state。

您是否查看了此文件?是否查看了此文件?