# React.Component
Component
的实现非常简单
function Component(props, context, updater) {
this.props = props;
this.context = context;
this.refs = emptyObject;
this.updater = updater || ReactNoopUpdateQueue;
}
Component.prototype.isReactComponent = {};
Component.prototype.setState = function(partialState, callback) {
this.updater.enqueueSetState(this, partialState, callback, 'setState');
};
Component.prototype.forceUpdate = function(callback) {
this.updater.enqueueForceUpdate(this, callback, 'forceUpdate');
};
就是一些属性我们常用的属性,唯一一个不熟悉的是updater
,这个属性是在组件实例化的时候传入的,跟不同平台有关,比如RN
和ReactDOM
就有不同的实现。
而事实上我们在使用ClassComponent
的时候也不过是把我们声明的class
作为参数传给createElement
,在这个时候并没有实例化,实例化其实是在更新过程中才做的事情。
所以ClassComponent
不过是一个载体,因为我们需要使用组件内部的state
和side effect
,而类的实例也是相对比较封闭的一个概念,所以React团队才选择用class
来作为基础的组件声明(此处怀念一下曾经的React.createClass)。同时在React团队找到了更好的使用state
和side effect
的方式的时候,也就是React16.7的Hooks
,那么class
形式的组件声明也将渐渐淡出开发者的视线
# PureComponent
PureComponent
跟Component
完全就是一样的,唯一的区别是
pureComponentPrototype.isPureReactComponent = true;
他的原型上多了一个标示表明继承自这个类的组件是pure
的,那么后期ReactDOM对节点树进行更新的时候,会对pure
的组件增加一个 **浅比较props
**的逻辑,来减少不必要的组件更新。