React setState是同步还是异步的
环境 React 16.9.0 React-Dom 16.9.0 前言 从下面代码的运行结果可以得出如下结论: setTimeout和原生事件中,可以立即拿到更新结果。也就是同步 在合成事件和生命周期中,不能立即拿到更新结果。也就是所谓的“异步” 在合成事件和生命周期中,如果对同一个值进行多次 setState , setState 的批量更新策略会对其进行覆盖,取最后一次的执行 class App extends React.Component { constructor () { super(); this.state = { counter: 0 }; } componentDidMount () { // 生命周期中调用 console.log( "componentDidMount before: " + this.state.counter); this.setState({ counter: this.state.counter + 1 }); // 此处不能实时更新 console.log( "componentDidMount after: " + this.state.counter); set Timeout(() => { // set Timeout中调用 console.log( "setTimeout before: " + this.state