浅谈VUE中演示v-for为什么要加key


Posted in Javascript onJanuary 16, 2020

说到这个问题想必要举个例子了

没有key

<div id="app">
  <div>
   <input type="text" v-model="name">
   <button @click="add">添加</button>
  </div>
  <ul>
   <li v-for="(item, i) in list">
    <input type="checkbox"> {{item.name}}
   </li>
  </ul>
<script>
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
   el: '#app',
   data: {
    name: '',
    newId: 3,
    list: [
     { id: 1, name: '李斯' },
     { id: 2, name: '吕不韦' },
     { id: 3, name: '嬴政' }
    ]
   },
   methods: {
    add() {
     //注意这里是unshift
     this.list.unshift({ id: ++this.newId, name: this.name })
     this.name = ''
    }
   }
  });
 </script>
 </div>

当选中吕不为时,添加楠楠后选中的确是李斯,并不是我们想要的结果,我们想要的是当添加楠楠后,一种选中的是吕不为

浅谈VUE中演示v-for为什么要加key

浅谈VUE中演示v-for为什么要加key

有key

<div id="app">
  <div>
   <input type="text" v-model="name">
   <button @click="add">添加</button>
  </div>
  <ul>
   <li v-for="(item, i) in list" :key="item.id">
    <input type="checkbox"> {{item.name}}
   </li>
  </ul>
<script>
  // 创建 Vue 实例,得到 ViewModel
  var vm = new Vue({
   el: '#app',
   data: {
    name: '',
    newId: 3,
    list: [
     { id: 1, name: '李斯' },
     { id: 2, name: '吕不韦' },
     { id: 3, name: '嬴政' }
    ]
   },
   methods: {
    add() {
     //注意这里是unshift
     this.list.unshift({ id: ++this.newId, name: this.name })
     this.name = ''
    }
   }
  });
 </script>
 </div>

同样当选中吕不为时,添加楠楠后依旧选中的是吕不为。

浅谈VUE中演示v-for为什么要加key

浅谈VUE中演示v-for为什么要加key

可以简单的这样理解:加了key(一定要具有唯一性) id的checkbox跟内容进行了一个关联。是我们想达到的效果

查过相关文档,图例说明很清晰。

vue和react的虚拟DOM的Diff算法大致相同,其核心是基于两个简单的假设
首先讲一下diff算法的处理方法,对操作前后的dom树同一层的节点进行对比,一层一层对比,如下图:

浅谈VUE中演示v-for为什么要加key

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

比如一下这个情况:

浅谈VUE中演示v-for为什么要加key

我们希望可以在B和C之间加一个F,Diff算法默认执行起来是这样的:

浅谈VUE中演示v-for为什么要加key

即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率?
所以我们需要使用key来给每个节点做一个唯一标识,Diff算法就可以正确的识别此节点,找到正确的位置区插入新的节点。

浅谈VUE中演示v-for为什么要加key

vue中列表循环需加:key="唯一标识" 唯一标识可以是item里面id index等,因为vue组件高度复用增加Key可以标识组件的唯一性,为了更好地区别各个组件 key的作用主要是为了高效的更新虚拟DOM

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
如何实现动态删除javascript函数
May 27 Javascript
JavaScript 类的定义和引用 JavaScript高级培训 自定义对象
Apr 27 Javascript
javascript动态加载二
Aug 22 Javascript
jquery 判断滚动条到达了底部和顶端的方法
Apr 02 Javascript
JS实现的页面自定义滚动条效果
Oct 26 Javascript
JS操作JSON方法总结(推荐)
Jun 14 Javascript
vue mounted组件的使用
Jun 18 Javascript
JS事件绑定的常用方式实例总结
Mar 02 Javascript
微信小程序获取用户绑定手机号方法示例
Jul 21 Javascript
vue移动端实现手机左右滑动入场动画
Jun 17 Javascript
vue data对象重新赋值无效(未更改)的解决方式
Jul 24 Javascript
Openlayers测量距离与面积的实现方法
Sep 25 Javascript
Vue引入Stylus知识点总结
Jan 16 #Javascript
js实现提交前对列表数据的增删改查
Jan 16 #Javascript
react实现移动端下拉菜单的示例代码
Jan 16 #Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 #Javascript
JS实现简单的表格增删
Jan 16 #Javascript
JS实现基本的网页计算器功能示例
Jan 16 #Javascript
JS数组进阶示例【数组的几种函数用法】
Jan 16 #Javascript
You might like
php下foreach提示Warning:Invalid argument supplied for foreach()的解决方法
2014/11/11 PHP
分享一个Laravel好用的Cache宏
2015/03/02 PHP
Twig模板引擎用法入门教程
2016/01/20 PHP
php强大的时间转换函数strtotime
2016/02/18 PHP
Yii框架结合sphinx,Ajax实现搜索分页功能示例
2016/10/18 PHP
PHP获取redis里不存在的6位随机数应用示例【设置24小时过时】
2017/06/07 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
让IE8支持DOM 2(不用框架!)
2009/12/31 Javascript
基于jQuery实现下拉收缩(展开与折叠)特效
2012/12/25 Javascript
nodejs初步体验篇
2015/11/23 NodeJs
深入理解vue.js双向绑定的实现原理
2016/12/05 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
JavaScript实现简单随机点名器
2019/11/21 Javascript
WebPack工具运行原理及入门教程
2020/12/02 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
Python中unittest用法实例
2014/09/25 Python
在Django中创建动态视图的教程
2015/07/15 Python
python日志logging模块使用方法分析
2019/05/23 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
python单向循环链表原理与实现方法示例
2019/12/03 Python
python实现布隆过滤器及原理解析
2019/12/08 Python
Tensorflow 实现分批量读取数据
2020/01/04 Python
python 等差数列末项计算方式
2020/05/03 Python
购买大码女装:Lane Bryant
2016/09/07 全球购物
马来西亚航空官方网站:Malaysia Airlines
2017/07/28 全球购物
英国足球店:UK Soccer Shop
2017/11/19 全球购物
馥绿德雅美国官方网站:Rene Furterer头皮护理专家
2019/05/01 全球购物
有abstract方法的类一定要用abstract修饰吗
2016/03/14 面试题
工商管理专业实习生自我鉴定
2013/09/29 职场文书
汽车制造与装配专业自荐信范文
2014/01/02 职场文书
员工廉洁自律承诺书
2014/05/26 职场文书
涉密人员保密承诺书
2014/05/28 职场文书
股东授权委托书范文
2014/09/13 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
2015年全民创业工作总结
2015/07/23 职场文书