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);不一样
推荐阅读
- 微信小程序为啥没有直接采用react native来做
- ReactNative和OC开发应用,哪个门槛更低
- 大型reactnative项目怎样代码分层呢
- 有在深圳中深软通培训过的朋友吗,感觉咋样靠谱吗
- 合成的拷贝构造函数怎样调用成员的拷贝构造函数
- react怎样更好的实现逻辑的复用
- 苹果系统 插优盘桌面上的东西拷贝不到优盘里去
- function setup(): React.Component {……}这是啥写法?
- 熟练Javascript(其实只是个jQuery user),做React Native有优势么
- 移动开发我该选择Xamarin还是ReactNative
