持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第2天,点击查看活动详情
上一章中,我们提到了如何移动新元素,主要指元素内容没有变化,仅是顺序变化的情况,而这一章就是如何添加新元素元素。
我们将任务分解,其实添加新元素可以分解为2个步骤:
- 想办法找到新增节点
- 将新增节点挂载到正确位置
找到新增节点
这部分比较好理解,只需要对比一下新旧node的key即可。这快我就不写代码了,大家看下面这张图应该都能理解。
这时候如果你得虚拟Node没有key,那么对比起来就会麻烦很多了,因此这个key是vue对于虚拟DOM一个很重要的优化,大家再使用v-for的时候应该都要加上这个属性,并且不建议使用数组小标作为key,因为这样可以能会干扰key的对比过程。
将新增节点挂载到正确位置
当我们找到新节点之后,一般的情况,新增节点都会在末尾,但我们不能在代码中直接把新增的dom放到末尾,这样是不对的。我们需要去判断新节点的位置,然后将它挂载道正确的位置。比如我们上面那张图,新增的p-4节点在倒数第二位上。
在书中写到的解决办法是先插入的末尾,然后再次对比,再移动DOM。
我觉得这样比较啰嗦,当我们遍历新节点的时候,我们其实是可以直接知道新增节点的下标,这时候直接插入不就行了,但是这种情况只适用于顺序未变,仅插入新节点,比如我们常用的push操作。这样一想,原来作者的办法才是最具有普遍性的方法。