当前位置: 首页 > 网络应用技术

React源代码系列更新过程

时间:2023-03-08 12:46:13 网络应用技术

  在调度中创建更新对象

  在功能组件中,多个挂钩将形成一个链接的列表。每个挂钩将具有一个良好的环链接列表,并调用SchedulupDateOnFiber方法。

  SchedulupDateOnFiber:在此光纤中,此更新的中间程度

  从纤维中找到根后,请使用MarkupDateLaneFromFiberToroot从纤维节点上查找。

  致电Markrootupded

  更新过程可能是此过程。

  优先类型:

  n oliority = 0;//没有优先级

  立即占主张= 1;//立即执行优先级

  UserBlockingPriority = 2;//用户互动优先级

  正常值= 3;//普通优先级

  低优势= 4;// 低优先级

  idlepriority = 5;//它可以中断优先级

  在整个更新过程中,如果普通的SetState触发具有优先正常的更新,则将发现直到root,并且将保存在Fiberroot.Root Node上。

  让我们简单地查看一个代码来分析页面性能(并发模式):

  这是抓住低优先级任务的高优先任务的问题:

  在渲染页面的开头,初始状态为15,000 0页。这没问题。

  100毫秒后,将有正常优先级更新UpdateCount(1)。更新发现root后,它将生成更新计划。有15,000个光纤节点要更新。这是一个耗时的操作。

  在1001毫秒处,userblockingPriority Primits update buttonref.current?.Click()目前被打断了。

  基座:0与UpdateCount(Count => Count + 2)结合使用,以生成回忆:2。页面将首先渲染2。

  下一个更新是更新和所有以后的更新。基座是0.的值,将有UpdateCount(1)和UpdateCount(Count => Count + 2),生产MemoizedState:3,并且页面将呈现3。

  当这在组件中称为this.setstate时,它将输入

  加入方法:

  将根据当前实例获得当前光纤

  然后获得当前时间,

  然后获得小路优先级,

  然后创建更新,update.payload =状态

  因此,它可以回到文章开头的更新过程。

  花没有完全打开,月亮不是圆形的

  中山醉酒且无休止

  为什么您必须担心利润和损失

  毕竟,小米·旺夸

  原始:https://juejin.cn/post/710012896049498504