使用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 相关文章推荐
js利用Array.splice实现Array的insert/remove
Jan 13 Javascript
jQuery UI AutoComplete 使用说明
Jun 20 Javascript
javascript获取和判断浏览器窗口、屏幕、网页的高度、宽度等
May 08 Javascript
javaScript中slice函数用法实例分析
Jun 08 Javascript
jQuery实现的产品自动360度旋转展示特效源码分享
Aug 21 Javascript
js焦点文字滚动效果代码分享
Aug 25 Javascript
深入理解Angularjs中$http.post与$.post
May 19 Javascript
angularJs中datatable实现代码
Jun 03 Javascript
Vue filters过滤器的使用方法
Jul 14 Javascript
浅析Vue实例以及生命周期
Aug 14 Javascript
脚手架vue-cli工程webpack的作用和特点
Sep 29 Javascript
vue setInterval 定时器失效的解决方式
Jul 30 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
解析使用ThinkPHP应该掌握的调试手段
2013/06/20 PHP
php自定义时间转换函数示例
2016/12/07 PHP
PHP实现添加购物车功能
2017/03/06 PHP
php查询内存信息操作示例
2019/05/09 PHP
关于B/S判断浏览器断开的问题讨论
2008/10/29 Javascript
javascript中callee与caller的用法和应用场景
2010/12/08 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
2014/06/24 Javascript
js操作滚动条事件实例
2015/01/29 Javascript
HTML5使用DeviceOrientation实现摇一摇功能
2015/06/05 Javascript
JS实现的网页背景闪电闪烁效果代码
2015/10/17 Javascript
Node.js刷新session过期时间的实现方法推荐
2016/05/18 Javascript
JS实现的邮箱提示补全效果示例
2018/01/30 Javascript
vue 标签属性数据绑定和拼接的实现方法
2018/05/17 Javascript
Vuex入门到上手教程
2018/06/20 Javascript
详解Vue组件插槽的使用以及调用组件内的方法
2018/11/13 Javascript
使用imba.io框架得到比 vue 快50倍的性能基准
2019/06/17 Javascript
python插入排序算法的实现代码
2013/11/21 Python
python监控linux内存并写入mongodb(推荐)
2017/09/11 Python
python 删除指定时间间隔之前的文件实例
2018/04/24 Python
在python 不同时区之间的差值与转换方法
2019/01/14 Python
python 通过类中一个方法获取另一个方法变量的实例
2019/01/22 Python
TensorFlow dataset.shuffle、batch、repeat的使用详解
2020/01/21 Python
给keras层命名,并提取中间层输出值,保存到文档的实例
2020/05/23 Python
虚拟机下载python是否需要联网
2020/07/27 Python
利用css3制作3D样式按钮实现代码
2013/03/18 HTML / CSS
英国Lookfantastic中文网站:护肤品美妆美发购物(英国直邮)
2020/04/27 全球购物
国培计划培训感言
2014/03/11 职场文书
施工员岗位职责
2014/03/16 职场文书
结婚保证书范文
2014/04/29 职场文书
公司外出活动方案
2014/08/14 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
浅谈JS的二进制家族
2021/05/09 Javascript
MySql存储过程之逻辑判断和条件控制
2021/05/26 MySQL
JavaScript实现简单计时器
2021/06/22 Javascript
Vue elementUI表单嵌套表格并对每行进行校验详解
2022/02/18 Vue.js