使用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面象对象成员、共享成员变量实验
Nov 19 Javascript
8个超棒的学习 jQuery 的网站 推荐收藏
Apr 02 Javascript
js类式继承的具体实现方法
Dec 31 Javascript
js实现通用的微信分享组件示例
Mar 10 Javascript
js+jquery常用知识点汇总
Mar 03 Javascript
JavaScript中的call方法和apply方法使用对比
Aug 12 Javascript
微信小程序  自定义创建详细介绍
Oct 27 Javascript
getElementById().innerHTML与getElementById().value的区别
Oct 27 Javascript
JavaScript html5利用FileReader实现上传功能
Mar 27 Javascript
ES6中Math对象新增的方法实例详解
Apr 25 Javascript
TypeScript开发Node.js程序的方法
Apr 30 Javascript
vue.js click点击事件获取当前元素对象的操作
Aug 07 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投票系统防刷票判断流程分析
2012/02/04 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHP处理二进制数据的实现方法
2016/06/13 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
php源码 fsockopen获取网页内容实例详解
2016/09/24 PHP
jq选项卡鼠标延迟的插件实例
2013/05/13 Javascript
JavaScript中for..in循环陷阱介绍
2013/11/12 Javascript
jQuery实现图片走马灯效果的原理分析
2016/01/16 Javascript
利用Jquery队列实现根据输入数量显示的动画
2016/09/01 Javascript
探索Javascript中this的奥秘
2016/12/11 Javascript
NodeJS基础API搭建服务器详细过程记录
2017/04/01 NodeJs
详解Require.js与Sea.js的区别
2018/08/05 Javascript
JavaScript中的一些实用小技巧总结
2019/04/07 Javascript
详解Vue串联过滤器的使用场景
2020/04/30 Javascript
vue实现整屏滚动切换
2020/06/29 Javascript
[02:47]2018年度DOTA2最佳辅助位选手4号位-完美盛典
2018/12/17 DOTA
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
python实现批量修改文件名代码
2017/09/10 Python
python 删除字符串中连续多个空格并保留一个的方法
2018/12/22 Python
Python数据分析模块pandas用法详解
2019/09/04 Python
详解pycharm连接不上mysql数据库的解决办法
2020/01/10 Python
Python 没有main函数的原因
2020/07/10 Python
描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
2015/03/25 面试题
Android interview questions
2016/12/25 面试题
培训主管的岗位职责
2013/11/23 职场文书
农村党支部先进事迹
2014/01/14 职场文书
国庆节文艺活动方案
2014/02/03 职场文书
《歌唱二小放牛郎》教学反思
2014/04/19 职场文书
实习单位鉴定评语
2014/04/26 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
2014年图书馆个人工作总结
2014/12/18 职场文书
2015年护士节活动策划方案
2015/05/04 职场文书
运动会通讯稿100字
2015/07/20 职场文书
2015年中秋晚会主持稿
2015/07/30 职场文书
职工培训工作总结
2015/08/10 职场文书
html5+实现plus.io进行拍照和图片等获取
2022/06/01 HTML / CSS