我们平常写的class组件都需要继承React.Component这个基类,从而在类都实例中能使用相应的方法。下面让我们看看React.Component这个类究竟长什么样。
Component
const emptyObject = {};
function Component(props, context, updater) {
this.props = props;
this.context = context;
// 用于保存render方法return出来的组件里的ref,一开始初始化为空对象
this.refs = emptyObject;
// 这个是组件更新时调用的更新方法,一开始初始化为空的方法类,需要后续注入。
// 这样设计是为了能跨平台,如React-DOM实现一套更新方法,React-Native实现一套更新方法
this.updater = updater || ReactNoopUpdateQueue;
}
// 这是一个标记位,用于后续判断class是否是React.Component
Component.prototype.isReactComponent = {};
Component.prototype.setState = function(partialState, callback) {
// 这里调用后续注入进来的更新方法类来执行setState方法
this.updater.enqueueSetState(this, partialState, callback, 'setState');
};
Component.prototype.forceUpdate = function(callback) {
// 这里调用后续注入进来的更新方法类来执行forceUpdate方法
this.updater.enqueueForceUpdate(this, callb