在上一篇文章中,VUE3组件的初始化过程引入了它。接下来,让我们一起分析VUE3组件的更新过程。
先编写一个组件,然后来执行更新的过程
安装阶段是上一篇文章。直接跳过这里,让我们去更新过程
还记得组件安装阶段吗?当您在这里时,您将依赖收集,并且您将在实例上安装一个方法
当数据发送更改时,将触发函数。如果响应系统不清楚,则可以在此处查看。
整体流程图如下:
让我们分析VUE3中属性的更改
对于这种情况,我们如何找到属性的变化?是否应该在中间没有存在的情况下旅行,则应像这样编写标记的属性代码:
在这种情况下,我们需要找出属性的变化,您可以直接穿越旧杂志。
对于这种情况,我们是否仍然需要比较属性的函数来回收比较属性中的更改?对于上述情况,您可以使用相同的方法来添加,修改和删除属性,但是您可以使用相同的方法可以将处理映射到每个DOM
更新孩子,这里有一个条件。如果新孩子和老孩子触发差异算法。实际上,差异算法并不像预期的那样复杂。
在处理儿童更新的过程中,使用了两个端对比模式,以便可以减少对比度的范围
通过左侧比较获得起始位置
从上面的代码中,我们可以获得I的值,并将获得起始位置。
通过比较右侧,使最终位置锁定中间问题
通过这种方式,确定了终点,以下是判断边界条件。
在新长度和旧长度中,分为两种情况,
比右边的老
比左边的老
在新的矮小的短短短短小中,分为两种情况,
新的权利比旧权利短
新的左派比较老的短
通过上述比较,我们可以在[I,E2]中获得N2范围的新区域,而N1的范围为[I,E1]。在中间进行比较时,有一种非常直接的方法 - 循环直接破解暴力行为?人们在内部使用最长的随后序列算法来找到尽可能多的节点。如果您不熟悉最长增加的子序列算法,请参考此处
在比较中间部分时,将有以下情况:
中部仅存在于旧的删除中
在这里,我们可以看到错误。当v-for时,关键的角色是吗?
中部有新节点,没有旧节点 - 新节点添加节点
中间的一些节点存在,移动位置
从那时起,整个差异算法的核心就在这里。该文章使用diff数组,差异是真实的dom
有关更多详细信息,请参阅源代码
原始:https://juejin.cn/post/7104201092526948388