基于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 相关文章推荐
node.js超时timeout详解
Nov 26 Javascript
浅谈JavaScript异常处理语句
Jun 26 Javascript
Markdown与Bootstrap相结合实现图片自适应属性
May 04 Javascript
jQueryUI 拖放排序遇到滚动条时有可能无法执行排序的小bug及解决方案
Dec 19 Javascript
JavaScript数据结构中串的表示与应用实例
Apr 12 Javascript
Vue底层实现原理总结
Feb 17 Javascript
select标签设置默认选中的选项方法
Mar 02 Javascript
JavaScript设计模式之装饰者模式定义与应用示例
Jul 25 Javascript
AngularJS上传文件的示例代码
Nov 10 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
Sep 12 Javascript
使用Vue调取接口,并渲染数据的示例代码
Oct 28 Javascript
JS深入学习之数组对象排序操作示例
May 01 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
数据库中排序的对比及使用条件详解
2012/02/23 PHP
PHP程序员学习使用Swoole的理由
2018/06/24 PHP
PHP自定义递归函数实现数组转JSON功能【支持GBK编码】
2018/07/17 PHP
JQuery上传插件Uploadify使用详解及错误处理
2010/04/27 Javascript
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
js 获取class的元素的方法 以及创建方法getElementsByClassName
2013/03/11 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
JavaScript中this详解
2015/09/01 Javascript
你一定会收藏的Nodejs代码片段
2016/02/04 NodeJs
jquery validate表单验证插件
2016/09/06 Javascript
js字符串引用的两种方式(必看)
2016/09/18 Javascript
浅谈Vue.js
2017/03/02 Javascript
vue2.0项目中使用Ueditor富文本编辑器示例代码
2017/08/14 Javascript
详解Vue.js iview实现树形权限表(可扩展表)
2018/09/30 Javascript
微信小程序位置授权处理方法
2019/06/13 Javascript
微信小程序获取用户信息及手机号(后端TP5.0)
2019/09/12 Javascript
JS替换字符串中指定位置的字符(多种方法)
2020/05/28 Javascript
微信小程序实现页面监听自定义组件的触发事件
2020/11/01 Javascript
python解析xml模块封装代码
2014/02/07 Python
Pycharm代码无法复制,无法选中删除,无法编辑的解决方法
2018/10/22 Python
python匹配两个短语之间的字符实例
2018/12/25 Python
使用 python pyautogui实现鼠标键盘控制功能
2019/08/04 Python
使用python实现滑动验证码功能
2019/08/05 Python
python脚本和网页有何区别
2020/07/02 Python
Django crontab定时任务模块操作方法解析
2020/09/10 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
2014年圣诞节倒计时网页的制作过程
2014/12/05 HTML / CSS
千禧酒店及度假村官方网站:Millennium Hotels and Resorts
2019/05/10 全球购物
学校三八妇女节活动情况总结
2014/03/09 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
雷锋电影观后感
2015/06/10 职场文书
事业单位工作人员2015年度思想工作总结
2015/10/15 职场文书
企业管理不到位检讨书
2019/06/27 职场文书
小学生必读成语故事大全:送给暑假的你们
2019/07/09 职场文书
北京大学中文系教授推荐的10本小说
2019/08/08 职场文书
golang中的空接口使用详解
2021/03/30 Python