一起看看v-for中key属性的作用!

一起看看v-for中key属性的作用!

相关推荐:《vue.js教程》

其实不只是vue,react中在执行列表渲染时也会要求给每个组件添加上key这个属性。

要解释key的作用,不得不先介绍一下虚拟DOM的Diff算法了。

我们知道,vue和react都实现了一套虚拟DOM,使我们可以不直接操作DOM元素,只操作数据便可以重新渲染页面。而隐藏在背后的原理便是其高效的Diff算法。

vue和react的虚拟DOM的Diff算法大致相同,其核心是基于两个简单的假设:

两个相同的组件产生类似的DOM结构,不同的组件产生不同的DOM结构。

同一层级的一组节点,他们可以通过唯一的id进行区分。

基于以上这两点假设,使得虚拟DOM的Diff算法的复杂度从O(n^3)降到了O(n)。

这里我们借用React’s diff algorithm中的一张图来简单说明一下:
在这里插入图片描述

当页面的数据发生变化时,Diff算法只会比较同一层级的节点:

如果节点类型不同,直接干掉前面的节点,再创建并插入新的节点,不会再比较这个节点以后的子节点了。

如果节点类型相同,则会重新设置该节点的属性,从而实现节点的更新。

当某一层有很多相同的节点时,也就是列表节点时,Diff算法的更新过程默认情况下也是遵循以上原则。

比如以下这个情况:

在这里插入图片描述
我们希望可以在B和C之间加一个F,Diff算法默认执行起来是这样的:
在这里插入图片描述
即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率?

所以我们需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确的识别此节点,找到正确的位置区插入新的节点。

在这里插入图片描述
所以一句话,key的作用主要是为了高效的更新虚拟DOM。另外vue中在使用相同标签名元素的过渡切换时,也会使用到key属性,其目的也是为了让vue可以区分它们,

否则vue只会替换其内部属性而不会触发过渡效果。

更多编程相关知识,请访问:vue.js教程!!

以上就是一起看看v-for中key属性的作用!的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/3020617.html

(0)
上一篇 2025年3月13日 05:38:19
下一篇 2025年3月13日 05:38:29

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 浅谈vue.js中$refs的使用方法(附代码)

    相关推荐:《vue.js教程》 说明:vm.$refs 一个对象,持有已注册过 ref 的所有子组件(或HTML元素)使用:在 HTML元素 中,添加ref属性,然后在JS中通过vm.$refs.属性来获取注意:如果获取的是一个子组件,那么…

    2025年3月13日
    200
  • Vuex中Mutations怎么理解?怎么用?

    相关推荐:《vue.js教程》 通俗的理解mutations,里面装着一些改变数据方法的集合,这是Vuex设计很重要的一点,就是把处理数据逻辑方法全部放在mutations里面,使得数据和视图分离。 怎么用mutations? mutati…

    2025年3月13日
    200
  • vue项目中怎么设置title图标?(图文详解)

    vue项目中怎么设置title图标?下面本篇文章给大家介绍一下vue项目中设置title图标的方法。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 相关推荐:《vue.js教程》 在项目index.html头部引入这句话:…

    2025年3月13日
    200
  • vue.js算开发工具吗

    vue.js不算开发工具;Vue.js是一个用于创建用户界面的开源JavaScript框架,也是一个创建单页应用的Web应用框架;Vue所关注的核心是MVC模式中的视图层。 本文操作环境:windows7系统、vue2.0、DELL G3电…

    2025年3月13日
    200
  • vue哪一年出来的

    vue.js是受到Angular启发,在2013年开发出来的,最初命名为Seed;同年12月更名为vue,版本号是“0.6.0”。在2014年正式对外发布,版本号是“0.8.0”。 本教程操作环境:windows7系统、vue2.9.6版、…

    2025年3月13日
    200
  • vue3.0有哪些新特性

    vue3.0新特性有:1、性能比vue2.x块1.2~2倍;2、支持tree-shaking;3、引入了Composition API;4、暴露了自定义渲染API;5、新增三个组件(Fragment、Teleport、Suspense)等。…

    2025年3月13日
    200
  • 浅析vue创建组件的几种方式

    创建vue组件,就是为了拆分vue实例的代码量,通过不同的组件找到不同的功能。下面就介绍三种vue创建组件的方式,有需要的朋友可以参考一下,希望对大家有所帮助。 方法一:使用 Vue.extend 来创建全局的Vue组件 实例: var c…

    2025年3月13日 编程技术
    200
  • 图解vue生命周期

    本篇文章整理vue生命周期,将其制成图分享给大家。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 vue生命周期图解 【相关推荐:《vue.js教程》】 以上就是图解vue生命周期的详细内容,更多请关注【创想鸟】其它相关文…

    2025年3月13日
    200
  • 10个关于路由vue-router的vuejs面试题(含答案解析)

    本篇文章给大家介绍10个中关于路由vue-router的vuejs面试题。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 路由 vue-router 面试题 1. mvvm框架是什么? mvvm即Model-View-Vi…

    2025年3月13日
    200
  • 13道前端vue面试题分享(附答案解析)

    本篇文章给大家分享一些前端vue面试题。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。 vue面试题 1.vue-router是怎么传递参数的2.v-if和v-for一起使用的弊端以及解决办法3.beforeDestroy…

    2025年3月13日
    200

发表回复

登录后才能评论