基于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 相关文章推荐
jQuery使用手册之一
Mar 24 Javascript
基于jquery.Jcrop的头像编辑器
Mar 01 Javascript
jquery 关键字“拖曳搜索”之“拖曳”以及 图片“提示自适应放大”效果 的实现
Apr 18 Javascript
在JavaScript中监听IME键盘输入事件
May 29 Javascript
jQuery实现的Div窗口震动效果实例
Aug 07 Javascript
jquery实现动画菜单的左右滚动、渐变及图形背景滚动等效果
Aug 25 Javascript
使用jQuery制作浮动工具栏的实例分享
May 13 Javascript
javascript监听页面刷新和页面关闭事件方法详解
Jan 09 Javascript
Bootstrap 过渡效果Transition 模态框(Modal)
Mar 17 Javascript
如何从零开始利用js手写一个Promise库详解
Apr 19 Javascript
vue实现微信二次分享以及自定义分享的示例
Mar 20 Javascript
Vue-router中hash模式与history模式的区别详解
Dec 15 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
Base64在线编码解码实现代码 演示与下载
2011/01/08 PHP
php操作JSON格式数据的实现代码
2011/12/24 PHP
PHP排序算法的复习和总结
2012/02/15 PHP
PHP实现将几张照片拼接到一起的合成图片功能【便于整体打印输出】
2017/11/14 PHP
PHP date()格式MySQL中插入datetime方法
2019/01/29 PHP
PHP封装的简单连接MongoDB类示例
2019/02/13 PHP
PHP如何使用JWT做Api接口身份认证的实现
2020/02/03 PHP
Javascript 入门基础学习
2010/03/10 Javascript
javascript权威指南 学习笔记之javascript数据类型
2011/09/24 Javascript
javascript 保存文件到本地实现方法
2012/11/29 Javascript
用jquery实现点击栏目背景色改变
2012/12/10 Javascript
扩展IE中一些不兼容的方法如contains、startWith等等
2014/01/09 Javascript
AngularJS基础 ng-keypress 指令简单示例
2016/08/02 Javascript
vue初尝试--项目结构(推荐)
2018/01/30 Javascript
浅谈react-router@4.0 使用方法和源码分析
2019/06/04 Javascript
vue实现的封装全局filter并统一管理操作示例
2020/02/02 Javascript
flexible.js实现移动端rem适配方案
2020/04/07 Javascript
从零开始在vue-cli4配置自适应vw布局的实现
2020/06/08 Javascript
three.js 利用uv和ThreeBSP制作一个快递柜功能
2020/08/18 Javascript
JavaScript事件委托实现原理及优点进行
2020/08/29 Javascript
jquery简易手风琴插件的封装
2020/10/13 jQuery
详解Vue的mixin策略
2020/11/19 Vue.js
[06:07]DOTA2-DPC中国联赛 正赛 Ehome vs VG 选手采访
2021/03/11 DOTA
Python在groupby分组后提取指定位置记录方法
2018/04/20 Python
Python面向对象程序设计之继承、多态原理与用法详解
2020/03/23 Python
联想新加坡官方网站:Lenovo Singapore
2017/10/24 全球购物
匡威荷兰官方网站:Converse荷兰
2018/10/24 全球购物
澳大利亚网上书店:QBD
2021/01/09 全球购物
工业学校毕业生自荐书
2014/01/03 职场文书
教师个人剖析材料
2014/02/05 职场文书
《棉鞋里的阳光》教学反思
2014/04/24 职场文书
我读书我快乐演讲稿
2014/05/07 职场文书
小学教师师德师风演讲稿
2014/08/22 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
Pytorch 如何加速Dataloader提升数据读取速度
2021/05/28 Python
教你如何使用Python开发一个钉钉群应答机器人
2021/06/21 Python