PureComponent和FunctionComponent区

2020-02-21  本文已影响0人  Ernestfu

pureComponent

pureComponent继承Component, 和Component唯一的区别就是加了个属性

pureComponentPrototype.isPureReactComponent = true;

这个属性就表示是PureReactComponent
那么这个标识的意义是什么呢?

function checkShouldComponentUpdate(workInProgress, ctor, oldProps, newProps, oldState, newState, nextContext) {
  var instance = workInProgress.stateNode;
  if (typeof instance.shouldComponentUpdate === 'function') {
    startPhaseTimer(workInProgress, 'shouldComponentUpdate');
    var shouldUpdate = instance.shouldComponentUpdate(newProps, newState, nextContext);
    stopPhaseTimer();

    {
      !(shouldUpdate !== undefined) ? warningWithoutStack$1(false, '%s.shouldComponentUpdate(): Returned undefined instead of a ' + 'boolean value. Make sure to return true or false.', getComponentName(ctor) || 'Component') : void 0;
    }

    return shouldUpdate;
  }

  // 重点看这里
  // PureComponent.prototype.isPureReactComponent === true
  // PureComponent 只会对 props 和 state 进行浅比较,对对象只做引用比对
  if (ctor.prototype && ctor.prototype.isPureReactComponent) {
    return !shallowEqual(oldProps, newProps) || !shallowEqual(oldState, newState);
  }

  return true;
}

通过这段代码发现首先判断是否有使用shouldComponentUpdate这个生命周期的方法,如果没有接着会来判断
isPureReactComponent这个参数是否为true,然后只会对 props 和 state 进行浅比较,对象只做引用比对这就是PureComponent。

FunctionComponent

Function在加入hook之后和React.memo() 之后有改动,后面再完善。

上一篇下一篇

猜你喜欢

热点阅读