使用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设置GridPanel表格文本垂直居中示例
Jul 15 Javascript
JavaScript实现存储HTML字符串示例
Apr 21 Javascript
jQuery制作简单柱状图实例
Jan 28 Javascript
js数组依据下标删除元素
Apr 14 Javascript
javascript中call apply 的应用场景
Apr 16 Javascript
小程序自定义单页面、全局导航栏的实现代码
Mar 15 Javascript
微信小程序批量监听输入框对按钮样式进行控制的实现代码
Oct 12 Javascript
jquery 时间戳转日期过程详解
Oct 12 jQuery
Vue实现简单计算器案例
Feb 25 Javascript
详解三种方式在React中解决绑定this的作用域问题并传参
Aug 18 Javascript
vue实现购物车的小练习
Dec 21 Vue.js
vue3弹出层V3Popup实例详解
Jan 04 Vue.js
利用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
dedecms系统的广告设置代码 基础版本
2010/04/09 PHP
php全角字符转换为半角函数
2014/02/07 PHP
Smarty模板学习笔记之Smarty简介
2014/05/20 PHP
2个Codeigniter文件批量上传控制器写法例子
2014/07/25 PHP
PHP simplexml_load_string()函数实例讲解
2019/02/03 PHP
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
javascript类型转换示例
2014/04/29 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
让浏览器崩溃的12行JS代码(DoS攻击分析及防御)
2016/10/10 Javascript
vue2组件实现懒加载浅析
2017/03/29 Javascript
jQuery 利用ztree实现树形表格的实例代码
2017/09/27 jQuery
vue-cli如何引入bootstrap工具的方法
2017/10/19 Javascript
基于vue2.0动态组件及render详解
2018/03/17 Javascript
JS将网址url转化为JSON格式的方法
2018/07/02 Javascript
vue 优化CDN加速的方法示例
2018/09/19 Javascript
vue动态删除从数据库倒入列表的某一条方法
2018/09/29 Javascript
Vue使用axios出现options请求方法
2019/05/30 Javascript
jquery操作checkbox的常用方法总结【附测试源码下载】
2019/06/10 jQuery
微信小程序实现form表单本地储存数据
2019/06/27 Javascript
微信小程序 数据缓存实现方法详解
2019/08/26 Javascript
videocapture库制作python视频高速传输程序
2013/12/23 Python
对python for 文件指定行读写操作详解
2018/12/29 Python
pandas计算最大连续间隔的方法
2019/07/04 Python
python psutil模块使用方法解析
2019/08/01 Python
Python空间数据处理之GDAL读写遥感图像
2019/08/01 Python
pytorch: Parameter 的数据结构实例
2019/12/31 Python
python 引用传递和值传递详解(实参,形参)
2020/06/05 Python
Python扫描端口的实现
2021/01/25 Python
成人毕业生自我鉴定
2013/10/18 职场文书
工作疏忽检讨书
2014/01/25 职场文书
研究生毕业鉴定
2014/01/29 职场文书
劳资协议书范本
2014/04/23 职场文书
个人学习党的群众路线教育实践活动心得体会
2014/11/05 职场文书
学校教代会开幕词
2016/03/04 职场文书
2021年国产动漫公司排行前十名,玄机科技上榜,第二推出过铠甲勇士
2022/03/18 杂记
漫画「请问您今天要来点兔子吗?」最新杂志彩页公开
2022/03/24 日漫