Appearance
全局变量
根节点有关全局变量
workInProgressRootSkippedLanes
本次渲染访问过的组件留下的未处理更新,仅包含未处理的更新,不包括已跳过子树的工作。
类型 : Lane | Lanes
格式 : 0b0000b0000000000000000000000000000000
作用 : 缓存了当前渲染流程中跳过执行的 update 的 updateLane 。
添加时机 :
- useState 等
hook在更新渲染阶段,执行 useState 时会计算当前 updateLane 下所有的 update,并在第一个非当前 updateLane 的 update 执行时,跳出 update 链表的执行,并将当前 updateLane 添加到 workInProgressRootSkippedLanes 中。
- useState 等
- useDefferedValue 在更新渲染阶段,如果存在高优先级 lane 的情况下,会在新旧值不同的情况下,生成一个
deferredLane添加到 workInProgressRootSkippedLanes 中。
- useDefferedValue 在更新渲染阶段,如果存在高优先级 lane 的情况下,会在新旧值不同的情况下,生成一个
js
function updateDeferredValueImpl<T>(hook: Hook, prevValue: T, value: T): T {
// 判断是否需要延迟渲染
const shouldDeferValue = !includesOnlyNonUrgentLanes(renderLanes);
if (shouldDeferValue) {
// 包含高优先级的 lane
// 那么就判断新旧值是否发生变化
if (!is(value, prevValue)) {
// 如果值发生变化,就需要延迟渲染
// 那么就需要创建一个新的 lane
const deferredLane = claimNextTransitionLane();
// 将新的 lane 添加到当前节点的 lanes 属性中
currentlyRenderingFiber.lanes = mergeLanes(
currentlyRenderingFiber.lanes,
deferredLane
);
// 将新的 lane 添加到根节点 workInProgressRootSkippedLanes 属性中
markSkippedUpdateLanes(deferredLane);
}
return prevValue;
}
}workInProgressRootIncludedLanes
"Included" lanes 指本次渲染期间处理过的 lanes。 与 renderLanes 略有不同,因为 renderLanes 在进入/退出 Offscreen 子树时会变化。 该值是整个渲染阶段所有 render lanes 的组合。
