- Published on
fiber lane 渲染流程参与
- Authors

- Name
- 李丹秋
function enqueueUpdate(
fiber: Fiber,
queue: ConcurrentQueue | null,
update: ConcurrentUpdate | null,
lane: Lane,
) {
concurrentQueues[concurrentQueuesIndex++] = fiber;
concurrentQueues[concurrentQueuesIndex++] = queue;
concurrentQueues[concurrentQueuesIndex++] = update;
concurrentQueues[concurrentQueuesIndex++] = lane;
concurrentlyUpdatedLanes = mergeLanes(concurrentlyUpdatedLanes, lane);
// 优先级在enqueueUpdate函数中,被标记在fiber上,即更新优先级和更新的fiber是一一对应的
fiber.lanes = mergeLanes(fiber.lanes, lane);
const alternate = fiber.alternate;
if (alternate !== null) {
alternate.lanes = mergeLanes(alternate.lanes, lane);
}
}
renderRootConcurrent| renderRootSync -> markUpdateLaneFromFiberToRoot
先完成childLane的更新,然后再执行调和。调和的时候,会根据childLane的优先级,来决定是否执行调和。
在后续的更新过程中,会执行bailoutOnAlreadyFinishedWork, 会根据lane来判断是否需要跳过这个fiber的更新。