基于vue--key值的特殊用处详解


Posted in Javascript onJuly 31, 2020

数组的v-for

item in items

item of items

item,index in items

(item,index) in items

对象的v-for(键值,键名,索引)

value in object

(value, key) in object

(value, key, index) in object

v-for渲染的列表的结构采用“就地复用”的策略,也就说当数据重新排列数据时,会复用已在页面渲染好的元素,不会移动 DOM 元素来匹配数据项的顺序,这种模式是高效的,改变现有位置的结构的数据即可

eg:

问题:点击翻转数组哦,高亮并没有跟随1 在最后,而是直接复用在4上

基于vue--key值的特殊用处详解

原因:点击翻转数组哦,高亮并没有跟随1 在最后,而是直接复用在4上

解决:需要提供一个唯一的key值(常用ID),以便它能跟踪每个节点的身份,从而重用和重新排序现有元素

基于vue--key值的特殊用处详解

补充知识:vue---绑定key值与不绑定key的作用及其优点

vue—key值绑定的作用及优点

**

本文基于vue2x版本进行解析

绑定key值:可以更快速和更精确的确定变化数据的位置,并进行响应式操作,在一定量的数据之上时,是高性能的,更多的情况下与v-for一起使用;

不绑定key值:vue默认机制状态下的,当小于一定数据量时,并且DOM数据简单处理时,在刻意使用的情况下,vue的默认机制是更加高性能的,仅限于数据量较小,数据类型简单且后续不会有过多更新时使用。

总的来说,绑定key值与v-for绑定使用效果更好,不绑定key,在简单场景下使用性能更高,各有优缺点,可根据使用场景,按需使用。

代码分析见下文(如有错误请不吝指出,如正确必采纳改正)

1.在不绑定key的时候:

vue中的默认机制是不绑定key,

<div class="father" v-for=" item in data">
  <div>1</div> //node:a  默认状态下的不绑定key的虚拟节点
  <div>2</div> //node:b
  <div>3</div> //node:c
  <div>4</div> //node:d
</div>

此状态下的key值发生变化,更新的机制则是{就地更新},但相应的虚拟节点不会发生变化`如下所示:这种是vue的默认机制,就地更新,适用于简单的DOM数据渲染,在一定的数据量下,是比key值绑定更加高性能的;

<div class="father" v-for=" item in data">
  <div>2</div> //node:a  数据变化后,默认机制的标识没有变化,
  <div>3</div> //node:b
  <div>4</div> //node:c
  <div>1</div> //node:d
</div>

2:在绑定key值的时候:

此时,所有的虚拟节点均被绑定唯一的标识,类似于身份证的作用;

<div class="father" v-for=" item in data" :key="item.id">
  <div>1</div> //key:a  key值为唯一标识,
  <div>2</div> //key:b
  <div>3</div> //key:c
  <div>4</div> //key:d 
</div>

如果其中的数据发生变化,diff算法会映射到变化的虚拟节点,更加快速和精准的找到变化的节点,并对其进行newkey和oldkey的值判断,进行相应的更新操作:如下

<div class="father" v-for=" item in data" :key="item.id">
  <div>4</div> //key:d //数值变化 key值作为唯一标识,跟随
  <div>2</div> //key:b
  <div>3</div> //key:c
  <div>1</div> //key:a //数值变化 key值作为唯一标识,跟随
</div>

key的唯一标识是跟随数据变化的,并且唯一对应,

以上这篇基于vue--key值的特殊用处详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
May 25 Javascript
getJSON调用后台json数据时函数被调用两次的原因猜想
Sep 29 Javascript
javascript实现切换td中的值
Dec 05 Javascript
jQuery在页面加载时动态修改图片尺寸的方法
Mar 20 Javascript
jquery简单实现外部链接用新窗口打开的方法
May 30 Javascript
JavaScript中cookie工具函数封装的示例代码
Oct 11 Javascript
JS封装的三级联动菜单(使用时只需要一行js代码)
Oct 24 Javascript
原生js实现查询天气小应用
Dec 09 Javascript
Web纯前端“旭日图”实现元素周期表
Mar 10 Javascript
基于Bootstrap框架实现图片切换
Mar 10 Javascript
谈谈JS中的!!
Dec 07 Javascript
autojs 蚂蚁森林能量自动拾取即给指定好友浇水的实现方法
May 03 Javascript
javascript开发实现贪吃蛇游戏
Jul 31 #Javascript
vue 解决无法对未定义的值,空值或基元值设置反应属性报错问题
Jul 31 #Javascript
vscode中Vue别名路径提示的实现
Jul 31 #Javascript
Vue记住滚动条和实现下拉加载的完美方法
Jul 31 #Javascript
vue中渲染对象中属性时显示未定义的解决
Jul 31 #Javascript
JS可断点续传文件上传实现代码解析
Jul 30 #Javascript
Vue单文件组件开发实现过程详解
Jul 30 #Javascript
You might like
动漫女神老婆无限好,但日本女生可能就不是这么一回事了!
2020/03/04 日漫
PHP读取数据库并按照中文名称进行排序实现代码
2013/01/29 PHP
php多层数组与对象的转换实例代码
2013/08/05 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
2014/11/08 PHP
PHP获取一年有几周以及每周开始日期和结束日期
2015/08/06 PHP
CodeIgniter辅助之第三方类库third_party用法分析
2016/01/20 PHP
几个javascript操作word的参考代码
2009/10/26 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
js获取鼠标点击的位置实现思路及代码
2014/05/09 Javascript
JQuery的ON()方法支持的所有事件罗列
2015/02/28 Javascript
jQuery的position()方法详解
2015/07/19 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
详解angularjs的数组传参方式的简单实现
2017/07/28 Javascript
vue-router 手势滑动触发返回功能
2018/09/30 Javascript
详解用场景去理解函数柯里化(入门篇)
2019/04/11 Javascript
vue element-ui table组件动态生成表头和数据并修改单元格格式 父子组件通信
2019/08/15 Javascript
Vue的编码技巧与规范使用详解
2019/08/28 Javascript
react PropTypes校验传递的值操作示例
2020/04/28 Javascript
关于vue 项目中浏览器跨域的配置问题
2020/11/10 Javascript
原生JS实现pc端轮播图效果
2020/12/21 Javascript
Python CSV模块使用实例
2015/04/09 Python
python中异常报错处理方法汇总
2016/11/20 Python
python处理按钮消息的实例详解
2017/07/11 Python
Python3使用Matplotlib 绘制精美的数学函数图形
2019/04/11 Python
Python数据类型之String字符串实例详解
2019/05/08 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
django formset实现数据表的批量操作的示例代码
2019/12/06 Python
Python Lambda函数使用总结详解
2019/12/11 Python
基于Python实现体育彩票选号器功能代码实例
2020/09/16 Python
css3 线性渐变和径向渐变示例附图
2014/04/08 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
一组SQL面试题
2016/02/15 面试题
法学专业本科生自荐信范文
2013/12/17 职场文书
2015年高校就业工作总结
2015/05/04 职场文书
2015年乡镇纪委工作总结
2015/05/26 职场文书
军训决心书范文
2015/09/22 职场文书