使用vue for时为什么要key【推荐】


Posted in Javascript onJuly 11, 2019

前言:

用vue框架写前端代码时经常会用用到v-for这个方法,但使用此方法时vue推荐我们加上一个唯一标识key这是为什么呢?阅读了网上各位大神的文章以及自己的一些理解对这个问题有了新的认识。所以记录下来,若各位看官看到文章里面有错误的地方请指正一下。谢谢各位大佬。

一.diff算法

修改渲染真实的dom会引起整个dom树的重绘和重排。diff算法可以帮助我们只对我们想要修改的部分进行更新而不会引起整个dom树的重绘和重排。 我们先根据dom生成virtual DOM,当virtual Dom上的某个dom节点数据改变后会生成一个新的Vnode.将新生成的Vnode和oldVnode做对比。发现有修改的地方就直接渲染到真实的dom树上。

diff算法一边比较新旧节点的区别一边在真实的dom树上打补丁

二.key的作用

我个人觉得key的作用就是为了快速的找到新节点对应的旧节点。key是给每一个vnode唯一的id,可以依靠key,更准确, 更快的拿到oldVnode中对应的vnode节点。但不使用key时代码也可以运行但是会报warning.为什么呢。

三.不使用key时的执行

例:不使用key 一个数组arr=['1','2','3','4','5','6']

<view v-for='arr'>
    {{item}}
  </view>

上面代码会生成6个div每个div对应的arr中的数字。现在我们将arr变成[0, 1, 2, 3, 7, 8, 9]。更新渲染的步骤时这样的原先div中的1变成0 2变成1以此类推最后新增一个div内容为9。 Vue会通过改变原来元素的内容和增加/减少元素来完成这个改变,因为没有key属性,Vue无法跟踪每个节点,只能通过这样的方法来完成变更。

四.使用key时

例:numbers为[1, 2, 3, 7, 8, 9]

<div v-for="(num, index) in numbers" :key="index">
   {{num}}
  </div>

变成了[0, 1, 2, 3, 7,8,9]新增一个

元素,它的内容为0,并将它插入原先内容为1的元素之前。 在有了key属性之后,Vue会记住元素们的顺序,并根据这个顺序在适当的位置插入/删除元素来完成更新,这种方法比没有key属性时的就地复用策略效率更高。 总体来说,当使用列表渲染时,永远添加key属性,这样可以提高列表渲染的效率,提高了页面的性能。

总结

以上所述是小编给大家介绍的使用vue for时为什么要key属性,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Javascript 相关文章推荐
几个javascript操作word的参考代码
Oct 26 Javascript
js使用数组判断提交数据是否存在相同数据
Nov 27 Javascript
JS跨域问题详解
Nov 25 Javascript
如何用javascript计算文本框还能输入多少个字符
Jul 29 Javascript
用js编写的简单的计算器代码程序
Aug 04 Javascript
基于bootstrap实现bootstrap中文网巨幕效果
May 02 Javascript
VueJs 搭建Axios接口请求工具
Nov 20 Javascript
p5.js入门教程之图片加载
Mar 20 Javascript
详解解决使用axios发送json后台接收不到的问题
Jun 27 Javascript
vue-quill-editor+plupload富文本编辑器实例详解
Oct 19 Javascript
「中高级前端面试」JavaScript手写代码无敌秘籍(推荐)
Apr 08 Javascript
vue.js实现左边导航切换右边内容
Oct 21 Javascript
利用Angular7开发一个Radio组件的全过程
Jul 11 #Javascript
vue发送websocket请求和http post请求的实例代码
Jul 11 #Javascript
微信小程序之几种常见的弹框提示信息实现详解
Jul 11 #Javascript
JavaScript表格隔行变色和Tab标签页特效示例【附jQuery版】
Jul 11 #jQuery
vue项目中实现缓存的最佳方案详解
Jul 11 #Javascript
浅入深出Vue之组件使用
Jul 11 #Javascript
elementUI 动态生成几行几列的方法示例
Jul 11 #Javascript
You might like
PHP的FTP学习(二)[转自奥索]
2006/10/09 PHP
php设计模式  Command(命令模式)
2011/06/17 PHP
php获取文件大小的方法
2014/02/26 PHP
基于Swoole实现PHP与websocket聊天室
2016/08/03 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
tp5 实现列表数据根据状态排序
2019/10/18 PHP
页面中body onload 和 window.onload 冲突的问题的解决
2009/07/01 Javascript
JavaScript 事件查询综合
2009/07/13 Javascript
JavaScript写的一个DIV 弹出网页对话框
2009/08/14 Javascript
JavaScript实现穷举排列(permutation)算法谜题解答
2014/12/29 Javascript
javascript上下方向键控制表格行选中并高亮显示的方法
2015/02/13 Javascript
javascript结合Canvas 实现简易的圆形时钟
2015/03/11 Javascript
jQuery实现图片左右滚动特效
2020/04/20 Javascript
原生JavaScript实现Ajax的方法
2016/04/07 Javascript
JS简单获取当前日期时间的方法(如:2017-03-29 11:41:10 星期四)
2017/03/29 Javascript
Vue.2.0.5实现Class 与 Style 绑定的实例
2017/06/20 Javascript
AngularJs用户登录问题处理(交互及验证、阻止FQ处理)
2017/10/26 Javascript
对vue事件的延迟执行实例讲解
2018/08/28 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
JavaScript实现拖动对话框效果的实现代码
2020/10/12 Javascript
python返回昨天日期的方法
2015/05/13 Python
浅谈Python中range和xrange的区别
2017/12/20 Python
python+opencv打开摄像头,保存视频、拍照功能的实现方法
2019/01/08 Python
对python以16进制打印字节数组的方法详解
2019/01/24 Python
numpy下的flatten()函数用法详解
2019/05/27 Python
python调用pyaudio使用麦克风录制wav声音文件的教程
2019/06/26 Python
python requests库的使用
2021/01/06 Python
HTML5使用DOM进行自定义控制示例代码
2013/06/08 HTML / CSS
松下电器美国官方商店:Panasonic美国
2016/10/14 全球购物
Asics日本官网:鬼冢八喜郎创立的跑鞋运动品牌
2017/10/18 全球购物
英国排名第一的停车场运营商:NCP
2019/08/26 全球购物
关于赌博的检讨书
2014/01/24 职场文书
社区综治宣传月活动总结
2014/07/02 职场文书
法学专业求职信范文
2015/03/19 职场文书
建筑工程材料员岗位职责
2015/04/11 职场文书
教你使用Jenkins集成Harbor自动发布镜像
2022/04/03 Servers