react18源码学习(四),commit篇

209 阅读1分钟

react渲染分为render阶段 和commit阶段

本节我们讲解commit阶段

接上一节。我们打开调试项目,npm start后打开控制台

我们的页面结构如下:

image.png 这里点击p标签更新num,将会改变code中的数字,以此观察react在页面初始和state更新时,源码的执行情况。

启动项目,进入浏览器,打开控制台 录制performance,可以看到整体函数的调用情况

将函数调用分为两种情况,一个是初始化,一个是更新 红色部分就是render阶段执行的函数,绿色部分为commit阶段执行的函数,打开call tree我们可以看到更直观的函数调用栈,这里我们主要关注commitRoot下的调用栈

初始化

image.png image.png image.png image.png

更新

image.png image.png

我们可以看到更新和初始化,两者的函数调用栈有所不同,这是因为react18引入了并发 concurrent的概念,这里初始化时,默认为并发模式,函数入口为performConcurrentWorkOnRoot,下面的执行栈也与更新有所不同,而更新时,为同步模式,这里入口为performSyncWorkOnRoot