美文网首页
Vue中的key

Vue中的key

作者: skoll | 来源:发表于2022-06-10 16:01 被阅读0次

虚拟DOM的diff算法的两个假设

1 .两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构
2 .同一层级的一组节点,他们可以通过唯一的id进行区分

比较法则

1 .当页面数据发生变化时,diff算法只会比较同一层级的节点
2 .如果节点类型不同,直接干掉前面的节点,创建并插入新的节点,不在比较这个节点后面的子节点
3 .如果节点类型相同,就会重新设置该节点的属性,实现节点的更新

1 .当某一层有很多相同的节点的时候,比如一堆列表,就是遵循上面的原则进行更新的
2 .加入一个新的节点
3 .想要的是直接新建一个,插入到中间,但是实际上是c更新成f,d更新成c,e更新成d,然后新建一个e
4 .所以需要给每一个节点加一个key来标记,diff算法就能正确识别这个节点,找到正确的位置插入新的节点
image image image

删除的时候的实际操作

1 .不加key的时候,删除2号元素


image image

2 .实际逻辑:渲染数据由[1,2,3]变为[1,3]
3 .比较1渲染出来的虚拟dom结构,前后一样,不变
4 .比较2,3渲染出来的虚拟dom,使用2原来的dom结构,用3的数据替换2的数据
4 .比较3和undedined:删除3dom
5 .破解方法:使用id作为key

1 .开始数据 :[{id:1,value:1},{id:2,value:2},{id:3,value:3}]
2 .变化数据:[{id:1,value:1},{id:3,value:3}]
3 .直接看出id从123,变为13,说明第二项删除了
4 .然后依次对id:1和id:3的项,发现每变化

6 .不能使用index作为key

1 .使用index作为key,当删除元素的时候,之前的index会发生变化,也就是说index作为key是会动态变化的。
2 .还是会遇到和上面一样的bug

key的作用

1 .更加高效的更新虚拟DOM,在vue中使用相同签名元素的过渡切换时,可以区分前后的元素,vue只会替换内部元素而不会触发过渡效果
2 .key不会提高性能,相反,没有key性能才会高.没有key的时候,Vue使用"就地更新"的策略.数据项的增加和减少,顺序改变,Vue会使用一种算法来最小化元素的移动并尽可能尝试的就地修改/复用相同类型的元素.
3 .当有了key之后,可以跟踪每个节点的身份,会基于key的顺序变化重新排列元素,那些使用了已经不存在的key的元素将被移除/销毁.key可以用来强制替换元素而不是重复使用他.
4 .主要有以下场景

1 .完整的触发组件的生命周期钩子
2 .触发过渡

<transition>
  <span :key="text">{{ text }}</span>
</transition>
//当text变化的时候span总是会被替换而不是被修改,所以会触发过渡.

相关文章

  • Vue中的key

    虚拟DOM的diff算法的两个假设 1 .两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构2 ....

  • Vue核心小知识点

    一. Vue核心小知识点 1、vue中 key 值的作用 key 的特殊属性主要用在 Vue的虚拟DOM算法,在新...

  • vue面试常见问题

    vue中动态绑定class的方式? watch和computed的区别 vue中key的作用 vue父传子 子传父...

  • React diff算法

    react/vue中,key的作用是什么? 为什么遍历时,key最好不要用index? 虚拟DOM中key的作用:...

  • Vue7.列表渲染

    1. :key的内部原理, vue中的key有什么作用? 代码实例: 2. 列表过滤 3. 列表排序 3. Vue...

  • Vue 中不要用 index 作为 key

    Vue 中的 key 是用来做什么的?为什么不推荐使用 index 作为 key

  • Vue中使用google map (china)

    获取 google key index 文件中 引入 vue.config.js 中配置 ( 适用于vue-cli...

  • vue中key的作用

    我们先看一下vue官方文档中对key的介绍 key 的特殊属性主要用在 Vue 的虚拟 DOM 算法,在新旧 no...

  • vue中key的作用

    vue中key的作用主要是为了高效的更新dom, 其原理是vue在patch过程中通过keykey更精准判断俩个...

  • vue中:key的作用

    因为不理解 :key(v-bind:key),网上查了一些的资料,这篇写得非常不错,很简洁清楚。 其实不只是v...

网友评论

      本文标题:Vue中的key

      本文链接:https://www.haomeiwen.com/subject/erfjbctx.html