首页 文章

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

提问于
浏览
1

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

setState()不会立即改变this.state,但会创建挂起状态转换 . 调用此方法后访问this.state可能会返回现有值 . 无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以获得性能提升 .

是的,我理解该函数执行一些事情:

  • 更新状态中的实际值

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

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

谢谢 .

1 回答

  • 0

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

相关问题