Skip to content

React fiber(HostRoot) payload{element} 的作用 #46

@creamidea

Description

@creamidea

element 为第一个组件,即 HostRoot 的 children

在 render 函数里面,处理成 update.payload = { element }

在 render phase updateHostRoot 函数内,通过判读前后 children,判断 HostRoot 是否可以 bailout。所以作用就是快速路径返回的作用。

function updateHostRoot() {
    ...
    const prevState = workInProgress.memoizedState;
    const prevChildren = prevState.element;
    ...
    if (nextChildren === prevChildren) {
      return bailoutOnAlreadyFinishedWork(current, workInProgress, renderLanes);
    }
    ...
}

在 processUpdateQueue 内将 update.payload = { element },计算 state 结果放到 memoizedState 里

function processUpdateQueue() {
  ...
  // getStateFromUpdate 函数内 UpdateState 分支处理
  // payload 不是函数,所以直接返回 payload
  newState = getStateFromUpdate(
    workInProgress,
    queue,
    update,
    newState,
    props,
    instance,
  );
  ...
  workInProgress.memoizedState = newState;
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions