基于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 相关文章推荐
犀利的js 函数集合
Jun 11 Javascript
纯JavaScript实现的完美渐变弹出层效果代码
Apr 02 Javascript
Adapter适配器模式在JavaScript设计模式编程中的运用分析
May 18 Javascript
微信小程序实现顶部选项卡(swiper)
Jun 19 Javascript
动态Axios的配置步骤详解
Jan 12 Javascript
webpack之devtool详解
Feb 10 Javascript
vue 组件使用中的一些细节点
Apr 25 Javascript
vue中的计算属性实例详解
Sep 19 Javascript
详解JavaScript中的强制类型转换
Apr 15 Javascript
JS实现滑动导航效果
Jan 14 Javascript
基于VUE实现判断设备是PC还是移动端
Jul 03 Javascript
如何将Node.js中的回调转换为Promise
Nov 10 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
深入分析php之面向对象
2013/05/15 PHP
使用PHP编写发红包程序
2015/07/22 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
php统计数组不同元素的个数的实例方法
2019/09/26 PHP
jquery 输入框数字限制插件
2009/11/10 Javascript
javascript 处理事件绑定的一些兼容写法
2009/12/24 Javascript
基于jquery实现后台左侧菜单点击上下滑动显示
2013/04/11 Javascript
jQuery中removeClass()方法用法实例
2015/01/05 Javascript
Javascript设计模式理论与编程实战之简单工厂模式
2015/11/03 Javascript
JS中正则表达式只有3种匹配模式(没有单行模式)详解
2016/07/28 Javascript
DOM 事件的深入浅出(二)
2016/12/05 Javascript
jQuery实现可拖拽3D万花筒旋转特效
2017/01/03 Javascript
jQuery动态生成表格及右键菜单功能示例
2017/01/13 Javascript
vue Element-ui input 远程搜索与修改建议显示模版的示例代码
2017/10/19 Javascript
vue.js或js实现中文A-Z排序的方法
2018/03/08 Javascript
对vue2.0中.vue文件页面跳转之.$router.push的用法详解
2018/08/24 Javascript
微信公众号平台接口开发 菜单管理的实现
2019/08/14 Javascript
layui 实现二级弹窗弹出之后 关闭一级弹窗的方法
2019/09/18 Javascript
前端vue-cli项目中使用img图片和background背景图的几种方法
2019/11/13 Javascript
JavaScript(js)处理的HTML事件、键盘事件、鼠标事件简单示例
2019/11/19 Javascript
vuex实现购物车的增加减少移除
2020/06/28 Javascript
js实现tab栏切换效果
2020/08/02 Javascript
Python 文件重命名工具代码
2009/07/26 Python
巧用Python装饰器 免去调用父类构造函数的麻烦
2012/05/18 Python
python使用百度翻译进行中翻英示例
2014/04/14 Python
Python中关于使用模块的基础知识
2015/05/24 Python
python搭建微信公众平台
2016/02/09 Python
python之pandas用法大全
2018/03/13 Python
Python3读取Excel数据存入MySQL的方法
2018/05/04 Python
Python API 自动化实战详解(纯代码)
2019/06/11 Python
python实现键盘输入的实操方法
2019/07/16 Python
Python识别html主要文本框过程解析
2020/02/18 Python
在python3中实现更新界面
2020/02/21 Python
英国皇家邮政海外旗舰店:Royal Mail
2018/02/21 全球购物
毕业生求职自荐信怎么写
2014/01/08 职场文书
开发房地产协议书
2014/09/14 职场文书