老师,我想问下,FiberRoot的expirationTime的问题
来源:6-2 重设childExpirationTime
牛Plus
2021-08-31
老师,我想问下,FiberRoot的expirationTime的问题
如下
const rootExpirationTime = root.expirationTime;
// 请求工作调度
requestWork(root, rootExpirationTime);
在requestWork的时候,取的是FiberRoot的expirationTime 传进去,
接着requestWork调用addRootToSchedule将RootFiber加入调度链表,
判断root.nextScheduledRoot === null 这里又将expirationTime设置回去 是不是多次一举啊?
if (root.nextScheduledRoot === null) {
// 上面取的过期时间 在赋值回去 是不是多此一举?
root.expirationTime = expirationTime;
if (lastScheduledRoot === null) {
firstScheduledRoot = lastScheduledRoot = root;
root.nextScheduledRoot = root;
} else {
lastScheduledRoot.nextScheduledRoot = root;
lastScheduledRoot = root;
lastScheduledRoot.nextScheduledRoot = firstScheduledRoot;
}
哦对 我刚才结合 else 思考了下 应该是此时可能正在rendering FibreRoot的
expirationTime被修改了 ,但是此时这个FiberRoot产生的更新优先级可能更高 所以给重新设置了下 我理解的对吗
const remainingExpirationTime = root.expirationTime;
if (
remainingExpirationTime === NoWork ||
expirationTime < remainingExpirationTime
) {
// Update the priority.
root.expirationTime = expirationTime;
}
写回答
1回答
-
Jokcy
2021-09-01
是的,就是说这次的更新可能会被中断,那么中断的时候就要把现在这个更新任务的过期时间再赋值回去
00
相似问题