基于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 相关文章推荐
Ext 表单布局实例代码
Apr 30 Javascript
Javascript学习笔记一 之 数据类型
Dec 15 Javascript
探讨在JQuery和Js中,如何让ajax执行完后再继续往下执行
Jul 09 Javascript
jquery中的$(document).ready()使用小结
Feb 14 Javascript
jquery禁止输入数字以外的字符的示例(纯数字验证码)
Apr 10 Javascript
jquery实现倒计时代码分享
Jun 13 Javascript
Javascript定义类(class)的三种方法详解
Mar 13 Javascript
jQuery实现分隔条左右拖动功能
Nov 21 Javascript
JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)
Jun 12 Javascript
AngularJS基础 ng-keyup 指令简单示例
Aug 02 Javascript
小程序实现订单倒计时功能
Apr 23 Javascript
微信小程序自定义tabBar在uni-app的适配详解
Sep 30 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单例模式详细介绍
2015/07/01 PHP
PHP正则表达式过滤html标签属性(DEMO)
2016/05/04 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
PHP 裁剪图片
2021/03/09 PHP
js压缩利器
2007/02/20 Javascript
JavaScript 学习历程和心得分享
2010/12/12 Javascript
namespace.js Javascript的命名空间库
2011/10/11 Javascript
Jquery validation remote 验证的缓存问题解决方法
2014/03/25 Javascript
jfreechart插件将数据展示成饼状图、柱状图和折线图
2015/04/13 Javascript
Bootstrap每天必学之附加导航(Affix)插件
2016/04/25 Javascript
jQuery弹出层后禁用底部滚动条(移动端关闭回到原位置)
2016/08/29 Javascript
浅谈jquery选择器 :first与:first-child的区别
2016/11/20 Javascript
详解网站中图片日常使用以及优化手法
2017/01/09 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
JavaScript学习笔记之图片库案例分析
2019/01/08 Javascript
jquery实现图片放大镜效果
2020/12/23 jQuery
[43:57]Liquid vs Mineski 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/19 DOTA
python使用urllib模块和pyquery实现阿里巴巴排名查询
2014/01/16 Python
python训练数据时打乱训练数据与标签的两种方法小结
2018/11/08 Python
python字符串替换re.sub()方法解析
2019/09/18 Python
利用python实现凯撒密码加解密功能
2020/03/31 Python
如何在Python3中使用telnetlib模块连接网络设备
2020/09/21 Python
详解CSS3中强大的filter(滤镜)属性
2017/06/29 HTML / CSS
美国智能家居专家:tink
2019/06/04 全球购物
EJB的几种类型
2012/08/15 面试题
大专应届生个人简历的自我评价
2013/10/15 职场文书
应届毕业生求职信范文
2013/12/18 职场文书
优秀交警事迹材料
2014/01/26 职场文书
商场主管竞聘书
2014/03/31 职场文书
小学生操行评语
2014/04/22 职场文书
我的画教学反思
2014/04/28 职场文书
学校感恩节活动策划方案
2014/10/06 职场文书
党员批评与自我批评总结
2014/10/15 职场文书
入党积极分子半年考察意见
2015/06/02 职场文书
PyTorch 如何设置随机数种子使结果可复现
2021/05/12 Python
SQL基础查询和LINQ集成化查询
2022/01/18 MySQL