使用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 相关文章推荐
extjs 列表框(multiselect)的动态添加列表项的方法
Jul 31 Javascript
jquery validate使用攻略 第四步
Jul 01 Javascript
JQuery学习笔记 nt-child的使用
Jan 17 Javascript
用jquery和json从后台获得数据集的代码
Nov 07 Javascript
让图片旋转任意角度及JQuery插件使用介绍
Mar 20 Javascript
js判断输入是否为数字的具体实例
Aug 03 Javascript
深入理解JavaScript系列(19):求值策略(Evaluation strategy)详解
Mar 05 Javascript
学习JavaScript设计模式之中介者模式
Jan 14 Javascript
JavaScript常用判断写法大全(推荐)
May 30 Javascript
js获取浏览器的各种属性
Apr 27 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
Oct 24 Javascript
Vue.js组件使用props传递数据的方法
Oct 19 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图片处理之使用imagecopy函数添加图片水印实例
2014/11/19 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
php实现的美国50个州选择列表实例
2015/04/20 PHP
Javascript中eval函数的使用方法与示例
2007/04/09 Javascript
前端开发必须知道的JS之原型和继承
2010/07/06 Javascript
jquery load()在firefox(火狐)下显示不正常的解决方法
2011/04/05 Javascript
js实时监听文本框状态的方法
2011/04/26 Javascript
基于jquery的web页面日期格式化插件
2011/11/15 Javascript
js实现多选项切换导航菜单的方法
2015/02/06 Javascript
原生JavaScript编写俄罗斯方块
2015/03/30 Javascript
老生常谈js中的MVC
2017/07/25 Javascript
理解 Node.js 事件驱动机制的原理
2017/08/16 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
python实现迭代法求方程组的根过程解析
2019/11/25 Javascript
Vue+Element实现网页版个人简历系统(推荐)
2019/12/31 Javascript
python dict remove数组删除(del,pop)
2013/03/24 Python
Python2.x版本中cmp()方法的使用教程
2015/05/14 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
Python 比较文本相似性的方法(difflib,Levenshtein)
2018/10/15 Python
python dataframe向下向上填充,fillna和ffill的方法
2018/11/28 Python
Python中函数参数匹配模型详解
2019/06/09 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
pyqt5 使用cv2 显示图片,摄像头的实例
2019/06/27 Python
python requests更换代理适用于IP频率限制的方法
2019/08/21 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
html5 Canvas画图教程(5)—canvas里画曲线之arc方法
2013/01/09 HTML / CSS
iphoneX 适配客户端H5页面的方法教程
2017/12/08 HTML / CSS
《诺贝尔》教学反思
2014/02/17 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
公司演讲稿开场白
2014/08/25 职场文书
oracle重置序列从0开始递增1
2022/02/28 Oracle
R9700摩机记
2022/04/05 无线电
PyTorch中permute的使用方法
2022/04/26 Python