自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(14)
  • 收藏
  • 关注

原创 十、深入理解react中beginWork的工作流程

如果是update, 接下来会判断 wipFiberNode 是否能够复用,如果不能够复用,那么 update 和 mount 的流程基本是一样的。首先在beginWork中,会判断当前的流程是 mount ,还是 update,判断的依据是根据 currentFiberNode 是否存在。可以看到,在beginWork方法内部,也会做一些 flags标记,这些 flags 标记主要和元素的位置有关系。Reconciler(协调器)是render阶段的 第二个阶段的工作,整个工作的过程可以分为。

2024-12-13 16:28:30 338

原创 十三、深入理解react中的commit工作流程

删除DOM元素的操作发生在commitMutationEffects_begin方法中,首先会拿到deletions 数组,之后遍历该数组进行删除操作,对应的DOM 元素的方法为 commitDeletion。对于还没有插入的dom元素,insertBefore 会将目标DOM 元素插入到 before之前,appendChild会将目标DOM 元素作为父DOM元素的最后一个子元素插入。当Mutation阶段的主要工作完成后,在进入Layout阶段之前,会执行如下的代码来完成FiberTree的切换。

2024-12-13 16:28:04 688

原创 十一、深入理解 react中completeWork的工作流程

我们知道,当整个 Reconciler 完成工作后,会得到一颗完整的 wipFiberTree,这颗wipFiberTree是由 一颗一颗 FiberNode 中有一些标记了 flags,有一些没有标记,那么我们怎么能高效找到散落在这颗 树中有 flag标记的 ,那么此时就可以 通过 flags 冒泡。上面的代码,在FiberNode节点中,Hello 和 world 是同一级的,但是在实际dom元素里面,span 和 world 是同一级的。并且当前的FiberNode会标记 Update。

2024-12-13 16:27:51 804

原创 十二、深入理解React中的diff算法

Render阶段会生成 FiberTree,所谓的 diff实际上就是发生在这个阶段,这里的diff 指的是 current FiberNode 和 JSX对象之间进行对比,然后生成新的 workInProgress FiberNodediff算法本身就有性能上的消耗,在React文档上有说明,即使采用最前沿的算法,如果要完整的对比两颗树,那么算法的复杂度都会达到O(n^3),n代表元素的数量,如果n是1000,要执行的计算量会达到10亿个数量级所以,React为了降低复杂度,设置了3个限制: 更新前的代码

2024-12-13 16:27:13 659

原创 八、深入理解最小堆以及在react中的应用

在Scheduer中,使用最小堆的数据结构对任务进行排序。

2024-12-13 16:26:43 320

原创 十四、react中lane模型的理解

React早期采用的是 expirationTime模型,这一点和 Scheduler 里面的设计是一致的。在Scheduler中,设计了5种优先级,不同的优先级会设计对应不同的 timeout,最终会对应不同的expirationTime,然后 task 根据expirationTime 来进行任务的排序。

2024-12-13 16:25:05 989

原创 九、React中的位运算

所谓二进制,就是以二为底的一种计数方式。逢二进一我门经常会使用二进制来进行计算。基于二进制的位运算能够很方便的表达 增删改查比如我们后台管理系统,一般会针对权限的控制,一般这个使用的就是二进制使用二进制来表示权限,首先速度上会更快一些,其次在表示多种权限的时候,会更加方便一些在上面的代码中,会有一个问题,目前仅仅是一对一的关系,但是在实际开发中,往往有很多一对多的关系,也就是一个value可能会应对好几个值在这种情况下,我们使用二进制会方便很多二进制相关的运算。

2024-12-05 15:23:44 820

原创 七、深入理解React中延时任务的调度

React中延时任务的调度

2024-10-03 11:29:44 225

原创 六、深入理解React中普通任务的调度

React中普通任务的调度

2024-10-02 16:29:30 374

原创 五、为什么React中选择MessageChannel来创建任务

MessageChannel

2024-10-01 23:46:36 482

原创 四、对Fiber的理解以及什么是双缓冲

实际上,我们 可以从三个维度来理解Fiber在React16版本之前,React使用的是Stack架构;16版本之后,重构使用的Fiber架构,各个FiberNode之间是使用链表的形式来串联起来的Fiber 本质也是一个对象,是在之前React元素之上的一个升级版本。每个Fiber对象里面包含着元素的类型、连接的FiberNode、真实dom等信息在每个FibeNode中,保存了本次更新中该React元素变化的数据,还有就是要执行的工作(增加、删除、更新)以及副作用的信息。

2024-10-01 13:57:02 1077

原创 三、深入理解React的渲染流程

理解React的渲染流程

2024-09-30 13:01:16 809

原创 二、深入理解React的整体架构以及演变历程

React的架构、Fiber架构

2024-09-28 16:05:48 1294

原创 一、虚拟DOM,你真的了解了吗?

虚拟DOM

2024-09-27 15:43:14 411

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除