《Vuejs设计与实现》10.3 非理想状况的处理方式

78 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第7天,点击查看活动详情

上一章中,我们提到了双端比较的优势,这一章我们看看非理想状况时的处理方式,其实,之前举的例子很简单,但我们的业务需求很少会这么简单,只是头尾变了,或者只是插入或删除一个节点。更多时候,插入删除替换同时会出现。

image.png

在这个例子中,我们使用双端对比,我们会发现,每一个节点都发生了改变,这种情况其实很普遍,也就是标题中的 非理想状况

当出现这种情况的时候,我们应该先查看一下头部节点和尾部节点是否可以复用,也就是说头部和尾部是否只是还存在于新节点列表里。

在上面这段代码中,我们遍历旧的一组子节点,尝试在其中寻找。与新的一组子节点的头部节点具有相同 key 值的节点,并将该节点在旧的一组子节点中的索引存储到变量 idxInOld 中。

保存之后,在上面这段代码中,首先判断 idxInOld 是否大于 0。

  • 如果大于0,则说明找到了可复用的节点,然后将该节点对应的真实 DOM 移动到头部。 为此,我们先要获取需要移动的节点,这里的oldChildren[idxInOld] 所指向的节点就是需要移动的节点。

  • 如果小于0,我们只需要移动startIdx和EndIdx,进入下一次循环遍历。 对于非理想状况,我们的处理方法其实不多,顶多还是在循环中优化一下,提前退出循环。

书里面这一块内容很多,比较绕,建议还是以书中内容为准,仔细阅读这本书。如果不想买实体书的也可以留言我,我可以给你们分享PDF.