由于第一次看diff源码 激发了本人的贼大的好奇心 心想哇塞 准备要看diff了 好激动 总结了以下几点(不喜勿喷哈)先https://github.com/snabbdom/snabbdom.git 克隆一下地址 因为diff也是依赖于snabbdom这个东东来操作虚拟DOM的 所以我们先下载源码看看具体情况如何:
首先下载好印入眼前的是一群庞大的文件
根据以往经验 我们先看看snabbdom文档:snabbdom里有个h 返回了个函数Vnode
代码的结尾返回了一个vnode函数 其中 sel data children text 都是Vue函数里比较重要的,然后看看Vnode.ts里的代码
Vnode里 返回了 这么一个数据 其中elm 就是Vnode对应的DOM
由上面我们还得知 与Vnode有关联的 还有一个patch 代码里导出了一个init函数 ;而init函数返回了一个叫patch的函数(snabbdom.ts)
而Patch函数里 的第一个if判断式的意思是:判断文档里的 patch(container(dom元素),vnode) 里的第一个参数是不是vnode
如果不是创建一个空的vnode,关联到这个DOM元素 emptyNodeAt函数里创建一个空的Vnode 和elm(对应的DOM)做一个绑定
而第二个if判断 判断了新的vnode 和旧的Vnode是不是都相等(key和sel都相等)函数sameVnode里的结构是这样的:
而判断里 还有个及其重要的函数 patchVnode 就是用来做 Vnode的对比来看看patchVnode 里的结构:
然后就是updateChildren:
由于有大量注释,所以就不做多解释了~~~~~~~~~反正是给我自己看的