关于setState是同步还是异步的请参考下文:
- setTimeout和原生事件中,可以立即拿到更新结果,也就是同步;
- 在合成事件和生命周期中,不能立即拿到更新结果,也就是所谓的异步;
- 在合成事件和生命周期中,如果对同一个值进行多次的批量更新策略会对其进行覆盖,取最后一次的执行;
文章还解释了:
- 为什么setTimeout和原生事件会同步更新
- “异步”场景下,什么时候对state进行的更新
关于如何进行同步更新,及时获取state的状态值
先说结论,一般是可以使用setState或者是useState的回调函数进行同步获取的。 juejin.im/post/684490… juejin.im/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.