基于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刷新框架子页面的七种方法代码
Nov 20 Javascript
JQuery通过Ajax提交表单并返回结果
Jul 31 Javascript
jquery click([data],fn)使用方法实例介绍
Jul 08 Javascript
js形成页面的一种遮罩效果实例代码
Jan 04 Javascript
jQuery中trigger()方法用法实例
Jan 19 Javascript
HTML+CSS+JS实现完美兼容各大浏览器的TABLE固定列
Apr 26 Javascript
jquery控制显示服务器生成的图片流
Aug 04 Javascript
js操作DOM--添加、删除节点的简单实例
Jul 08 Javascript
js设置随机切换背景图片的简单实例
Nov 12 Javascript
jQuery实现checkbox的简单操作
Nov 18 jQuery
Vue底层实现原理总结
Feb 17 Javascript
vue3不同环境下实现配置代理
May 25 Vue.js
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
CodeIgniter中实现泛域名解析
2014/07/19 PHP
Yii2.0高级框架数据库增删改查的一些操作
2015/11/16 PHP
php简单截取字符串代码示例
2016/10/19 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
Thinkphp5框架实现图片、音频和视频文件的上传功能详解
2019/08/27 PHP
splice slice区别
2006/10/09 Javascript
javascript 无提示关闭窗口脚本
2009/08/17 Javascript
在JavaScript中监听IME键盘输入事件
2011/05/29 Javascript
使用apply方法处理数组的三个技巧[译]
2012/09/20 Javascript
JavaScript模板引擎用法实例
2015/07/10 Javascript
asp.net中oracle 存储过程(图文)
2015/08/12 Javascript
基于jQuery滑动杆实现购买日期选择效果
2015/09/15 Javascript
日常收集整理的JavaScript常用函数方法
2015/12/10 Javascript
基于jQuery实现交互体验社会化分享代码附源码下载
2016/01/04 Javascript
浅谈javascript中的三种弹窗
2016/10/21 Javascript
JS两种类型的表单提交方法实例分析
2016/11/28 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
2018/07/17 Javascript
如何解决日期函数new Date()浏览器兼容性问题
2019/09/11 Javascript
Vue中computed及watch区别实例解析
2020/08/01 Javascript
[01:10:02]IG vs Winstrike 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
python merge、concat合并数据集的实例讲解
2018/04/12 Python
基于python的多进程共享变量正确打开方式
2018/04/28 Python
Python中按值来获取指定的键
2019/03/04 Python
python实现opencv+scoket网络实时图传
2020/03/20 Python
Python代码注释规范代码实例解析
2020/08/14 Python
Python实现钉钉/企业微信自动打卡的示例代码
2021/02/02 Python
HTML5中5个简单实用的API
2014/04/28 HTML / CSS
英国旅游额外服务市场领导者:Holiday Extras(机场停车场、酒店、接送等)
2017/10/07 全球购物
Black Halo官方网站:购买连衣裙、礼服和连体裤
2018/06/13 全球购物
美体小铺法国官方网站:The Body Shop法国
2020/06/04 全球购物
新文化运动的口号
2014/06/21 职场文书
爱护公共设施演讲稿
2014/09/13 职场文书
司机个人年终总结
2015/03/03 职场文书
2015初中团支部工作总结
2015/07/21 职场文书
2016小学优秀教师先进事迹材料
2016/02/26 职场文书
Zabbix对Kafka topic积压数据监控的解决方案
2022/07/07 Servers