乐趣区

关于react.js:React-commitRoot

commitRoot

  1. 全局变量 workInProgressRoot、workInProgress、workInProgressRootRenderLanes 设为 默认值
  2. 获取 workInProgress 上的 firstEffect(completeUnitOfWork 生成的)

    if (finishedWork.flags > PerformedWork) {if (finishedWork.lastEffect !== null) {
        finishedWork.lastEffect.nextEffect = finishedWork;
        firstEffect = finishedWork.firstEffect;
      } else {firstEffect = finishedWork;}
    }

commitBeforeMutationEffects

  1. before mutation: 对不同组件进行操作

    • class 组件: 获取 snapshot
    • 其余组件: 不解决

commitMutationEffects

  1. 将组件退出到实在的 dom 节点下 —— div#root.appendChild(child)
  2. HostComponent: commitUpdate 进行事件注册

commitLayoutEffects

性能

  1. ref 挂载: commitAttachRef: ref.current = current.stateNode
  2. commitLifeCycles

    1. 函数组件: commitHookEffectListMount —— 取出 finishedWork.updateQueue,执行外面的 hooks
    2. class 组件:

      • 执行生命周期办法, componentDidUpdate(props, state, snapshot)
      • commitUpdateQueue

代码

  1. commitUpdateQueue: 执行 updateQueue 中的办法

    function commitUpdateQueue(finishedWork, finishedQueue, instance) {
      var effects = finishedQueue.effects;
      finishedQueue.effects = null;
    
      if (effects !== null) {for (var i = 0; i < effects.length; i++) {var effect = effects[i];
          var callback = effect.callback;
    
          if (callback !== null) {
            effect.callback = null;
            callCallback(callback, instance);
          }
        }
      }
    }
退出移动版