【CRR学习笔记】React setState异步/同步与同步更新策略

759 阅读1分钟

关于setState是同步还是异步的请参考下文:

  1. setTimeout和原生事件中,可以立即拿到更新结果,也就是同步;
  2. 在合成事件和生命周期中,不能立即拿到更新结果,也就是所谓的异步;
  3. 在合成事件和生命周期中,如果对同一个值进行多次的批量更新策略会对其进行覆盖,取最后一次的执行;

segmentfault.com/a/119000002…

文章还解释了:

  1. 为什么setTimeout和原生事件会同步更新
  2. “异步”场景下,什么时候对state进行的更新

关于如何进行同步更新,及时获取state的状态值

先说结论,一般是可以使用setState或者是useState的回调函数进行同步获取的。 juejin.cn/post/684490… juejin.cn/post/684490…

Hooks:

const [state, setState] = useState(initialState);

如果需要根据先前的状态更新状态,可以使用回调函数setState(prevState => newState)。

React

setState

setState函数的第二个参数允许传入回调函数,在状态更新完毕后进行调用。

this.setState( {count: this.state.count + 1},()=>{ console.log(this.state.count) // 1 })

敲重点!如果一个state依赖于另一个state的实时状态,请用useEffect.