关于 tag 和 key 我可不可以这么理解

来源:4-9 虚拟DOM-diff算法概述

起点丶

2021-06-04

  • 课程里讲的

tag 和 key 相同 不再深度比较

我理解的意思是:不再像一般的没优化过的 diff 算法【时间复杂度为O(n^3)】那样, 不仅仅是相同节点比较,当节点相同时,还要不同节点进行比较

  • 而优化过的 diff 算法【也就是用在前端的 , 如 vue react 以及 snabbdom,因为dom树无需过深去比较】,如果 tag 和 key 相同,说明是节点没变【也就是 旧<div key='1'>children</div> 和 新<div key='1'>children</div> 是一样的没有更改】,就不用再拿 新的 div 和 旧的 div 的子元素 children节点 做比较,这其实是 优化后的 diff 算法原本的特性【只比较同级节点】
  • snabbdom 的源码里边 tag 和 key 相同 还是会去 patch chilren元素,这里是正常的,并不是上边所说的 ‘深度比较’,他只是不去管这一对相同的节点,而是去比较他们的 children 节点,所以这里并非是算法意义上的 ‘深度比较’
    我看好多同学这里有疑问,我也是仔细琢磨了一遍才想明白,我的理解应该没问题吧?
写回答

1回答

双越

2021-06-04

没问题,非常棒!

而且这种把理解的内容写出来、分享出来的方式,也非常赞。既加深自己的理解,又惠及他人。

0
3
慕婉清8096975
回复
双越
key的作用应该是个tag一样的,只是在不同的时候做删除重建,而不是相同就不比较子节点了
2022-07-08
共3条回复

2024版 前端框架及项目面试 聚焦Vue3/React/Webpack

面向1-3年前端的框架及项目面试“刚需内容”

4664 学习 · 1644 问题

查看课程