React 中 PureComponent 部分代码分析

PR

添加 PureComponent 部分的 pr

分析

先大体看一下这次的pr都做了些什么事情

  • 增加 ReactPureComponent 类文件
  • ReactPureComponent 的测试文件
  • ReactCompositeComponent.js 文件的改动

这里重点看一下第一点和第三点

ReactPureComponent.js 文件

0

ReactCompositeComponent.js 的改动

1

2

3

4

  • 31-36行 增加了CompositeTypes对象,这里重点注意ImpureClass值为0,PureClass值为1

  • 100-101行 增加了isPureComponent方法,注意isPureReactComponent属性在ReactPureComponent初始化时值设置为1

  • 235-241行 这里对isPureComponent 值进行判断,设置_compositeType的值

  • 873-876行 当this._compositeType与CompositeTypes.PureClass相等时,利用shallowEqual比较props和state的先后变化

总结

经过上面的分析,可以认为当我们的一个组件继承了React.PureComponent类时,React内部会帮我们做一次对props和state的比较,如果二者其一发生变化,组件重新render,所以我们称这个组件为一个纯组件。React.PureComponent 让我们不必重复的写ComponentShouldUpdate 方法。