react中深拷贝状态,用setState()更新状态,控制台输出,为啥看到的是未更新前的状态

setState() 是异步的。
■网友
setState是异步的, 程序运行到console的时候还未更新state, 应该这样写:
handleClick(i) { let square = this.state.squares.slice(); square = \u0026#39;X\u0026#39;; this.setState({squares: square},()=\u0026gt;{ console.log(this.state.squares); });}

■网友
当你调用setState的时候,其实会最终调用一个enqueueUpdate方法,如果你写在componentDidComponent里面,
在enqueueUpdate方法里面batchingStrategy.isBatchingUpdates为true。代表正在创组件或更新,此时:
暂且先不处理update,只是将组件放在dirtyComponents数组中
dirtyComponents.push(component);
然后继续执行创建或更新组件。直到执行完didcomponent。
【react中深拷贝状态,用setState()更新状态,控制台输出,为啥看到的是未更新前的状态】 此时,打印this.state还是之前的,因为还没执行updateComponent 更新state
深入挖掘setState

■网友
this.setState是异步,如果想拿到执行后的结果,可以加个callback参数。
■网友
没记错的话setState是异步的于是有个坑:setState(this.state+1);setState(this.state+1);和setState(this.state+2);不一样


    推荐阅读