- [ ] setState
- [ ] 组件的更新机制依靠事务进行批量更新
- [ ] 将state的更新延缓到最后批量合并再去渲染对于应用的性能优化是有极大好处的,如果每次的状态改变都去重新渲染真实dom,那么它将带来巨大的性能消耗。
- [ ] setState 只在合成事件和钩子函数中是“异步”的,在原生事件和 setTimeout 中都是同步的。生命周期函数和合成函数中调用setState表现异步更新,是因为组件初始化和调用合成函数时都会触发ReactDefaultBatchingStrategy事务的batchUpdates方法,将批量更新标记设置为true,所以后面的setState都会存储到dirtyComponents中,执行批量更新之后再将标志设置为false
- [ ] setState的“异步”并不是说内部由异步代码实现,其实本身执行的过程和代码都是同步的,只是合成事件和钩子函数的调用顺序在更新之前,导致在合成事件和钩子函数中没法立马拿到更新后的值,形式了所谓的“异步”,当然可以通过第二个参数 setState(partialState, callback) 中的callback拿到更新后的结果 |
|