基于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 相关文章推荐
你的编程语言可以这样做吗?
Sep 07 Javascript
js 实现图片预加载(js操作 Image对象属性complete ,事件onload 异步加载图片)
Mar 25 Javascript
document.createElement()用法及注意事项(ff下不兼容)
Mar 13 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
javascript的日期对象、数组对象、二维数组使用说明
Dec 22 Javascript
实例解析jQuery工具函数
Dec 01 Javascript
JavaScript组成、引入、输出、运算符基础知识讲解
Dec 08 Javascript
基于pako.js实现gzip的压缩和解压功能示例
Jun 13 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
Jul 17 jQuery
微信小程序使用toast消息对话框提示用户忘记输入用户名或密码功能【附源码下载】
Dec 09 Javascript
基于Vue2.X的路由和钩子函数详解
Feb 09 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 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去掉从word直接粘贴过来的没有用格式的函数
2012/10/29 PHP
解析dedecms空间迁移步骤详解
2013/05/15 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
有一段有意思的代码-javascript现实多行信息
2007/08/26 Javascript
JavaScript 原型继承之构造函数继承
2011/08/26 Javascript
javascript:history.go()和History.back()的区别及应用
2012/11/25 Javascript
JavaScript修改css样式style动态改变元素样式
2013/12/16 Javascript
js+jquery常用知识点汇总
2015/03/03 Javascript
微信小程序 数据绑定详解及实例
2016/10/25 Javascript
移动端脚本框架Hammer.js
2016/12/15 Javascript
jquery横向纵向鼠标滚轮全屏切换
2017/02/27 Javascript
详解用node编写自己的cli工具
2017/05/23 Javascript
IScroll那些事_当内容不足时下拉刷新的解决方法
2017/07/18 Javascript
nodejs基于mssql模块连接sqlserver数据库的简单封装操作示例
2018/01/05 NodeJs
nodejs 最新版安装npm 的使用详解
2018/01/18 NodeJs
基于axios 解决跨域cookie丢失的问题
2018/09/26 Javascript
js中innerText/textContent和innerHTML与target和currentTarget的区别
2019/01/21 Javascript
如何用JavaScript实现功能齐全的单链表详解
2019/02/11 Javascript
vue实现自定义H5视频播放器的方法步骤
2019/07/01 Javascript
python list中append()与extend()用法分享
2013/03/24 Python
Python实现遍历目录的方法【测试可用】
2017/03/22 Python
浅谈Matplotlib简介和pyplot的简单使用——文本标注和箭头
2018/01/09 Python
获取Pytorch中间某一层权重或者特征的例子
2019/08/17 Python
python wxpython 实现界面跳转功能
2019/12/17 Python
利用OpenCV中对图像数据进行64F和8U转换的方式
2020/06/03 Python
python实现发送QQ邮件(可加附件)
2020/12/23 Python
css3和jquery实现自定义checkbox和radiobox组件
2014/04/22 HTML / CSS
一道Delphi面试题
2016/10/28 面试题
幼儿园长自我鉴定
2013/10/17 职场文书
物流管理专业应届生求职信
2013/11/21 职场文书
大学毕业生自荐书怎么写?
2014/01/06 职场文书
公司档案管理制度
2015/08/05 职场文书
旷工检讨书大全
2015/08/15 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript
详细介绍Next.js脚手架完整搭建封装
2022/04/26 Javascript