跳到主要内容

setState与pureComponent

setState

setState在合成事件里本来是就有一个批量更新的逻辑,最后所有setSate最后计算的最终状态如何合并到state里?做不做浅比较?

合并到state

Object.assign的作用:

主要是将所有可枚举属性的值从一个或多个源对象复制到目标对象,同时返回目标对象。 如果目标对象中的属性具有相同的键,则属性将被源对象中的属性覆盖。 后来的源对象的属性将类似地覆盖早先的属性。

Object.assign({}, prevState, partialState);

如果合并和原来的state相同岂不是浪费

Component组件的state不会进行对比,只要setState就一定会触发渲染。

所以需要pureComponent来做优化,对state和props都做浅比较

 if (this._compositeType === CompositeTypes.PureClass) {
shouldUpdate =
!shallowEqual(prevProps, nextProps) ||
!shallowEqual(inst.state, nextState);
}

虽然可以避免没有改变的元素发生不必要的重新渲染,但是使用上面的这种浅比较还是会带来一些问题,比如深层级的改变了,却不会渲染。此时可以通过不可变数据来实现。