updateHostComponent

hostComponent指的是原生的HTML标签。

function updateHostComponent(current, workInProgress, renderExpirationTime) {
  pushHostContext(workInProgress);

  if (current === null) {
    tryToClaimNextHydratableInstance(workInProgress);
  }

  const type = workInProgress.type;
  const nextProps = workInProgress.pendingProps;
  const prevProps = current !== null ? current.memoizedProps : null;

  let nextChildren = nextProps.children;
  //判断是否是文字节点
  const isDirectTextChild = shouldSetTextContent(type, nextProps);

  if (isDirectTextChild) {

    nextChildren = null;
  } else if (prevProps !== null && shouldSetTextContent(type, prevProps)) {
      //从文字节点切换到正常节点后或者是空节点,加上ContentReset标记
    workInProgress.effectTag |= ContentReset;
  }

  markRef(current, workInProgress);

  // 检查属性中是否有offscreen/hidden.
  if (
    workInProgress.mode & ConcurrentMode &&
    renderExpirationTime !== Never &&
    shouldDeprioritizeSubtree(type, nextProps)
  ) {
    if (enableSchedulerTracing) {
      markSpawnedWork(Never);
    }
    // 如果是offscreen/hidden,将其expirationTime设置Never,然后直接bailout
    workInProgress.expirationTime = workInProgress.childExpirationTime = Never;
    return null;
  }

  reconcileChildren(
    current,
    workInProgress,
    nextChildren,
    renderExpirationTime,
  );
  return workInProgress.child;
}

results matching ""

    No results matching ""