Vue3.x源码阅读笔记(四)-Diff算法
之前讲过当新旧节点两个都是数组vnode的时候,就会执行我们的diff过程,也就是patchKeyedChildren方法。
我们可以回忆一下在Vue2中的diff,是通过头部和头部,尾部和尾部,头部和尾部等交叉对比来实现的,我们可以看一下在Vue3中,是如何实现的。
之前讲过当新旧节点两个都是数组vnode的时候,就会执行我们的diff过程,也就是patchKeyedChildren方法。
我们可以回忆一下在Vue2中的diff,是通过头部和头部,尾部和尾部,头部和尾部等交叉对比来实现的,我们可以看一下在Vue3中,是如何实现的。
前两节讲了组件的创建和首次将DOM VNode挂载到页面的过程,其中当我们页面数据发生变化时候,会调用副作用渲染函数更新组件,这次来看下组件更新部分的逻辑,主要做了三件事情:
更新组件VNode节点
首先明确一点,vnode是在组件instance中存在的。
组件挂载方法主要在mountComponent中。
这里的创建组件实例主要是通过函数去创建的,在Vue2当中,是通过实例化类的方式去创建的
递归是一种解决问题的方法,它从解决问题的各个小部分开始,直到解决最初的大问题。
下面能够调用自身的函数,就是递归函数。每个函数都必须有一个基线条件,即一个不再递归调用的条件
1 | |