使用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 相关文章推荐
xml分页+ajax请求数据源+dom取结果实例代码
Oct 31 Javascript
jquery实现保存已选用户
Jul 21 Javascript
javascript框架设计读书笔记之字符串的扩展和修复
Dec 02 Javascript
浅析JavaScript事件和方法
Feb 28 Javascript
node.js回调函数之阻塞调用与非阻塞调用
Nov 13 Javascript
移动开发之自适应手机屏幕宽度
Nov 23 Javascript
JS实现加载时锁定HTML页面元素的方法
Jun 24 Javascript
使用JavaScript实现链表的数据结构的代码
Aug 02 Javascript
js获取html页面代码中图片地址的实现代码
Mar 05 Javascript
JavaScript实现表单注册、表单验证、运算符功能
Oct 15 Javascript
Jquery cookie插件实现原理代码解析
Aug 04 jQuery
一篇文章带你搞懂Vue虚拟Dom与diff算法
Aug 25 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
编写漂亮的代码 - 将后台程序与前端程序分开
2008/04/23 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
php实现中文转数字
2016/02/18 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
PHP实现八皇后算法
2019/05/06 PHP
YUI 读码日记之 YAHOO.util.Dom - Part.1
2008/03/22 Javascript
用javascript添加控件自定义属性解析
2013/11/25 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
javascript模拟命名空间
2015/04/17 Javascript
JS转换HTML转义符的方法
2016/08/24 Javascript
小程序开发实战:实现九宫格界面的导航的代码实现
2017/01/19 Javascript
Popup弹出框添加数据实现方法
2017/10/27 Javascript
使用 electron 实现类似新版 QQ 的登录界面效果(阴影、背景动画、窗体3D翻转)
2018/10/23 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
vue父子模板传值问题解决方法案例分析
2020/02/26 Javascript
vue.js 输入框输入值自动过滤特殊字符替换中问标点操作
2020/08/31 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
[05:00]第二届DOTA2亚洲邀请赛主赛事第三天比赛集锦.mp4
2017/04/04 DOTA
使用python语言,比较两个字符串是否相同的实例
2018/06/29 Python
django的ORM操作 增加和查询
2019/07/26 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
Python小程序之在图片上加入数字的代码
2019/11/26 Python
tensorflow对图像进行拼接的例子
2020/02/05 Python
Python Selenium模块安装使用教程详解
2020/07/09 Python
HTML5 Canvas旋转动画的2个代码例子(一个旋转的太极图效果)
2014/04/10 HTML / CSS
Html5+CSS3+EL表达式问题小结
2020/12/19 HTML / CSS
什么是属性访问器
2015/10/26 面试题
企业面试题试卷附带答案
2015/12/20 面试题
幼儿园毕业教师感言
2014/02/21 职场文书
税务干部个人整改措施思想汇报
2014/10/10 职场文书
个人务虚会发言材料
2014/10/20 职场文书
2014年财务科工作总结
2014/11/11 职场文书
遗失证明范文
2015/06/19 职场文书
大学生学习十八届五中全会精神心得体会
2016/01/05 职场文书
分位数回归模型quantile regeression应用详解及示例教程
2021/11/02 Python