setState 同步or异步?

同步和异步主要取决于它被调用的环境。

  • 在正常的react的事件流里(如onClick等)

setState和useState是异步执行的(不会立即更新state的结果)
多次执行setState和useState,只会调用一次重新渲染render
不同的是,setState会进行state的合并,而useState则不会

  • setTimeout/setInterval/Promise.then(fn)/fetch 回调/xhr 网络回调等原生JS控制的范围里调用

setState和useState是同步执行的(立即更新state的结果)
多次执行setState和useState,每一次的执行setState和useState,都会调用一次render

如果要在某些条件下需要对 JS 控制的区域实现批量更新 ( 异步更新 DOM ) ,那应该怎么做呢?

将代码包裹在 unstable_batchedUpdates 方法的回调函数中就可以实现强制批量更新。

import { unstable_batchedUpdates } from 'react-dom';

setTimeout(() => {
  unstable_batchedUpdates(() => {
    this.setState({
      count: this.state.count+1
    })
  });
});

你可能感兴趣的:(setState 同步or异步?)