老师,我想问下,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

是的,就是说这次的更新可能会被中断,那么中断的时候就要把现在这个更新任务的过期时间再赋值回去

0
0

React源码深度解析 高级前端工程师必备技能

掌握React源码,让你的开发水平没有上限,更不惧前端未来的到来

1751 学习 · 336 问题

查看课程