广告
返回顶部
首页 > 资讯 > 精选 >vue中的key有什么用
  • 759
分享到

vue中的key有什么用

2023-06-22 05:06:18 759人浏览 安东尼
摘要

小编给大家分享一下Vue中的key有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!key到底有什么用途 ?先来看官方解释 :key属性主要用在vue的虚拟DOM算法(diff算法), 在新旧nodes对比时辨识VNo

小编给大家分享一下Vue中的key有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!

key到底有什么用途 ?

  • 先来看官方解释 :

    • key属性主要用在vue的虚拟DOM算法(diff算法), 在新旧nodes对比时辨识VNodes

    • 不使用key时, Vue会使用一种最大限度减少动态元素并且尽可能的尝试就地修改/复用相同类型元素的算法

    • 使用key时, 它会基于key的变化重新排列元素顺序, 并且会移除/销毁key不存在的元素

面对这些云里雾里的概念, 先不要急, 看一遍有个印象, 接下来一步步来深度解析key到底拿来干嘛。

1 vnode 虚拟节点

vnode : virtual node, 虚拟节点

还记得DOM树中的要素吗 ? 文档, 元素, 节点

那什么是虚拟节点呢 ?

简单来说, 要被vue渲染到页面上的节点, 就是虚拟节点

  <template id="my-app">    <div class="title" style="font-size: 30px; color: red;">哈哈哈</div>  </template>

这里的div就是一个虚拟节点, 在vue中, 它以这种形式存在

    const vnode = {      type: "div",      props: {        class: "title",        style: {          "font-size": "30px",          color: "red",        },      },      children: "哈哈哈",    };

不理解的地方可能是children这个属性, 因为现在div没有子元素, 因此值仅仅为"哈哈哈", 若有子元素, 那么就会是一直套娃套下去, 套到最后一个结点为止, 如

      children: [        {          // 子元素        },        {          // 子元素        }      ],

2 vDOM 虚拟DOM

和真实DOM一样, 有真实节点就有真实DOM, 那么有虚拟节点, 就有虚拟DOM

当然虚拟DOM tree也一样咯, 也有叫VNode tree的, 一个意思, 这个不需要纠结, 大概是下面这样

  <template id="my-app">    <div>      <div>        <p></p>        <p></p>        <ul>          <li></li>          <li></li>          <li></li>        </ul>      </div>    </div>  </template>

转换成虚拟DOM树 :

vue中的key有什么用

虚拟DOM在渲染成真实DOM时, 不一定是完全一样的, 这里涉及到组件的问题, 后面有机会在讲

3 渲染过程

vue中的key有什么用

4 案例 : 插入f

理解完前面的后, 这里开始正题, 仅需一个案例, 就能全盘理解key的作用, 下面开始

先看这个简单的案例(没加key)

    <ul>      <li v-for="item in letters">{{item}}</li>    </ul>
      data() {        return {          letters: ['a', 'b', 'c', 'd']        }      },      methods: {        insertF() {          this.letters.splice(2, 0, 'f');        }      },

可以看出, 该题的目的是想在ab与cd之间, 插入一个f

理解了这个简单的案例后, 我们开始想, 有什么方法来插入到真实DOM中呢 ?

有以下三种 :

方法一(普通方法)

vue中的key有什么用

说明 : 直接把以前的dom删掉, 用新的vnode重新渲染一遍

方法二(不带key的diff算法)

vue中的key有什么用

说明 : 这是不带key时, vue默认的diff算法, 对应的源码如图

vue会通过判断语句, 来判断你是否带了key

vue中的key有什么用

下面是无key时的情况

vue中的key有什么用

然后查看patchUnkeyedChildren(), 就能查看diff算法的执行过程

这里简单描述下 :

  • 取到旧vnode和新vnode

  • 判断两者哪个数组长度较小(用较小的数组patch较大的数组, 才不会引起数组越界)

  • 开始patch, 也就是图片提到的, 一直patch到没有空间时(新vnode的c处), 分两种情况

    • 旧vnode < 新vnode时(也就是图片这种情况), 则需把多的值(此处为d)挂载至新node

    • 旧vnode > 新vnode时, 则卸载旧vnode节点

  • 结束循环

方法三(带key的diff算法)

vue中的key有什么用

同理, 跟着方法二的步骤就能查看到patchKeyedChildren()方法

这一种方法才是精髓, 开始复杂了

  • 先从头patch, 发现不相同时(此处为c !== f), break

  • 从尾部patch, 发现不相同时(此处为c !== f), break

    到目前为止, a, b, c, d 已经被渲染至真实DOM中, 就差f了, 下面就开始找f

  • 判断 :

    • 若旧vnode < 新vnode, 则挂载至新vnode

    • 若新vnode > 旧vnode, 则卸载旧vnode多余的节点

    • 若新vnode = 旧vnode, 这个就很复杂了, 就不管顺序, 在里面尽量patch到相同的项, 然后在进行卸载和挂载操作

看完了这篇文章,相信你对“vue中的key有什么用”有了一定的了解,如果想了解更多相关知识,欢迎关注编程网精选频道,感谢各位的阅读!

--结束END--

本文标题: vue中的key有什么用

本文链接: https://www.lsjlt.com/news/302658.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • vue中的key有什么用
    小编给大家分享一下vue中的key有什么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!key到底有什么用途 先来看官方解释 :key属性主要用在vue的虚拟DOM算法(diff算法), 在新旧nodes对比时辨识VNod...
    99+
    2023-06-22
  • vue中key的作用是什么
    这篇文章将为大家详细讲解有关vue中key的作用是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。为什么要使用VueVue是一款友好的、多用途且高性能的JavaScript框架,使用vue...
    99+
    2023-06-14
  • vue的key是什么
    本教程操作环境:windows7系统、vue3版,DELL G3电脑。1. key是什么key在Vue是DOM对象的标识;key是给每一个vnode的唯一id,也是diff的一种优化策略,可以根据key,更准确, 更快的找到对应的vnode...
    99+
    2023-05-14
    Vue
  • vue为什么使用key
    vue使用key的原因是:需要使用key来标识每个节点,这样的话diff算法才能正确的识别此节点,此做法主要是为了能够高效的更新虚拟dom。...
    99+
    2022-10-18
  • vue v-for中key的原理是什么
    这篇文章主要介绍“vue v-for中key的原理是什么”,在日常操作中,相信很多人在vue v-for中key的原理是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue ...
    99+
    2023-06-30
  • vue中设置key与不设置有什么区别
    本文小编为大家详细介绍“vue中设置key与不设置有什么区别”,内容详细,步骤清晰,细节处理妥当,希望这篇“vue中设置key与不设置有什么区别”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、Key是什么开始之...
    99+
    2023-06-30
  • vue的key怎么使用
    本篇内容主要讲解“vue的key怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue的key怎么使用”吧!在vue中,key是DOM对象的标识,是给每一个vnode的唯一id,也是dif...
    99+
    2023-07-04
  • vue中v-for的key唯一性是什么
    这篇文章主要介绍vue中v-for的key唯一性是什么,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. DOM Diff要想真正了解 key 属性的存在意义,还真得从 DOM Diff 说起,并不需要深入了解 DO...
    99+
    2023-06-15
  • html列表中的key属性有什么用
    这篇文章给大家分享的是有关html列表中的key属性有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。 diff 算法的时间复杂度是 O(n), 它的实现是基于以下两个假设...
    99+
    2022-10-19
  • 在vue中为什么不能用index作为key
    目录一、key的作用是什么?二、什么是虚拟DOM?三、什么是diff算法四、为什么不能用index作为key?(1)index不能作为key--情景一(2)index不能作为key-...
    99+
    2022-11-13
  • vue中v-for为什么要加key值
    这篇文章主要为大家展示了“vue中v-for为什么要加key值”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“vue中v-for为什么要加key值”这篇文章吧。v...
    99+
    2022-10-19
  • Vue中为什么不推荐用index做key详解
    目录前言diff算法key的作用通过 key 管理状态效率 & Bug总结前言 尤大在vue 2.x的文档中明确指出:建议尽可能在使用 v-for 时提供...
    99+
    2022-11-13
  • react中key的作用是什么
    本文小编为大家详细介绍“react中key的作用是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“react中key的作用是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。...
    99+
    2022-10-19
  • vue怎么将对象中所有的key赋为空值
    这篇文章主要介绍“vue怎么将对象中所有的key赋为空值”,在日常操作中,相信很多人在vue怎么将对象中所有的key赋为空值问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue怎么将对象中所有的key赋为空值...
    99+
    2023-06-29
  • Vue 中为什么不推荐用index 做 key属性值
    目录前言key 的作用key 在 diff 算法中的角色同步头部节点同步尾部节点添加新的节点删除多余节点最长递增子序列为什么不要用 index性能消耗数据错位解决方案总结前言 前端开...
    99+
    2022-11-12
  • Vue中不推荐用index做key的原因有哪些
    这篇文章主要介绍了Vue中不推荐用index做key的原因有哪些,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。前端开发中,只要涉及到列表渲染,那么无论是 React 还是 V...
    99+
    2023-06-21
  • VUE v-for中的:key详解
    不在v-for的标签中加入key时。 <!DOCTYPE html> <html lang="en"> <head> <meta c...
    99+
    2022-11-12
  • Vuejs中key值的作用是什么
    这篇文章给大家介绍Vuejs中key值的作用是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。key 的一个错误使用——使用 index 作为 key不知道你在写 v-for 的时候,会不会直接使用 index 作为...
    99+
    2023-06-15
  • key与index在Mysql中有什么区别
    本篇文章给大家分享的是有关key与index在Mysql中有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。我们先来看下代码:ALTER...
    99+
    2022-10-18
  • 一文详解Vue中加上key后发生什么
    目录前言什么是Keykey的作用key的底层原理前言 最近接手了一个Vue项目,很多的代码片段使用到了key, 结合自己以前接触key的经历,于是思考,在Vue中加上key发生了什么...
    99+
    2023-05-16
    Vue key
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作