基于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 相关文章推荐
javascript options属性集合操作代码
Dec 28 Javascript
Jquery替换已存在于element上的event的方法
Mar 09 Javascript
JavaScript学习笔记之JS对象
Jan 22 Javascript
JavaScript获得页面base标签中url的方法
Apr 03 Javascript
跟我学习javascript创建对象(类)的8种方法
Nov 20 Javascript
获取input标签的所有属性的方法
Jun 28 Javascript
微信小程序 progress组件详解及实例代码
Oct 25 Javascript
node中使用es5/6以及支持性与性能对比
Aug 11 Javascript
vue-cli + sass 的正确打开方式图文详解
Oct 27 Javascript
详解Angular中通过$location获取地址栏的参数
Aug 02 Javascript
详解如何快速配置webpack多入口脚手架
Dec 28 Javascript
vue实现图片裁剪后上传
Dec 16 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
shell脚本作为保证PHP脚本不挂掉的守护进程实例分享
2013/07/15 PHP
PHP答题类应用接口实例
2015/02/09 PHP
php实现Mysql简易操作类
2015/10/11 PHP
PHP入门教程之自定义函数用法详解(创建,调用,变量,参数,返回值等)
2016/09/11 PHP
PHP中Notice错误常见解决方法
2017/04/28 PHP
PHP判断访客是否手机端(移动端浏览器)访问的方法总结【4种方法】
2019/03/27 PHP
JS截取字符串常用方法整理及使用示例
2013/10/18 Javascript
js正则表达式replace替换变量方法
2016/05/21 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
基于JS实现的随机数字抽签实例
2016/12/08 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
js原生实现移动端手指滑动轮播图效果的示例
2018/01/02 Javascript
Vuejs在v-for中,利用index来对第一项添加class的方法
2018/03/03 Javascript
基于iScroll实现内容滚动效果
2018/03/21 Javascript
微信小程序利用canvas 绘制幸运大转盘功能
2018/07/06 Javascript
layui实现tab的添加拒绝重复的方法
2019/09/04 Javascript
python字典多条件排序方法实例
2014/06/30 Python
Python实现3行代码解简单的一元一次方程
2014/08/18 Python
python通过pil为png图片填充上背景颜色的方法
2015/03/17 Python
Django自定义插件实现网站登录验证码功能
2017/04/19 Python
python之Character string(实例讲解)
2017/09/25 Python
python Opencv计算图像相似度过程解析
2019/12/03 Python
Python远程开发环境部署与调试过程图解
2019/12/09 Python
HTML5 Canvas的性能提高技巧经验分享
2013/07/02 HTML / CSS
HTML5实现多张图片上传功能
2016/03/11 HTML / CSS
韩国三大免税店之一:THE GRAND 中文免税店
2016/07/21 全球购物
美国领先的在线旅游网站:Orbitz
2018/11/05 全球购物
创造美妙香氛体验:Aera扩散器和香水
2018/11/25 全球购物
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
缴纳养老保险的证明
2014/01/10 职场文书
元旦文艺汇演主持词
2014/03/26 职场文书
《第一朵杏花》教学反思
2014/04/16 职场文书
2014年学校财务工作总结
2014/12/06 职场文书
二手房购房意向书
2015/05/09 职场文书
Python docx库删除复制paragraph及行高设置图片插入示例
2022/07/23 Python