基于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 window.opener返回父页面的应用
Oct 24 Javascript
用jQuery toggleClass 实现鼠标移上变色
May 14 Javascript
JavaScript动态加载样式表的方法
Mar 21 Javascript
jquery中val()方法是从最后一个选项往前读取的
Sep 06 Javascript
javascript中new关键字详解
Dec 14 Javascript
BootStrap和jQuery相结合实现可编辑表格
Apr 21 Javascript
全面总结Javascript对数组对象的各种操作
Jan 22 Javascript
JavaScript自定义文本框光标
Mar 05 Javascript
vue router路由嵌套不显示问题的解决方法
Jun 17 Javascript
推荐10款扩展Web表单的JS插件
Dec 25 Javascript
在vue里使用codemirror遇到的问题
Nov 01 Javascript
layui内置模块layim发送图片添加加载动画的方法
Sep 23 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截取字符串函数分享(截取中文字符串)
2014/03/13 PHP
jQuery+PHP+ajax实现微博加载更多内容列表功能
2014/06/27 PHP
php判断GIF图片是否为动画的方法
2020/09/04 PHP
PHP MySql增删改查的简单实例
2016/06/21 PHP
Yii控制器中操作视图js的方法
2016/07/04 PHP
浅谈PHP安全防护之Web攻击
2017/01/03 PHP
PHP实现统计所有字符在字符串中出现次数的方法
2017/10/17 PHP
php使用curl模拟多线程实现批处理功能示例
2019/07/25 PHP
用javascript getComputedStyle获取和设置style的原理
2008/10/10 Javascript
JavaScript 图片预览效果 推荐
2009/12/22 Javascript
javascript和jquery修改a标签的href属性
2013/12/16 Javascript
JQuery弹出层示例可自定义
2014/05/19 Javascript
JS判断浏览器是否支持某一个CSS3属性的方法
2014/10/17 Javascript
jQuery操作JSON的CRUD用法实例
2015/02/25 Javascript
jQuery实现判断滚动条到底部
2015/06/23 Javascript
Bootstrap每天必学之前端开发框架
2015/11/19 Javascript
javascript的几种继承方法介绍
2016/03/22 Javascript
基于JS代码实现实时显示系统时间
2016/06/16 Javascript
用js制作淘宝放大镜效果
2020/10/28 Javascript
jQuery布局组件EasyUI Layout使用方法详解
2017/02/28 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
微信小程序常见页面跳转操作简单示例
2019/05/01 Javascript
WebSocket的简单介绍及应用
2019/05/23 Javascript
layui radio点击事件实现input显示和隐藏的例子
2019/09/02 Javascript
解决使用layui的时候form表单中的select等不能渲染的问题
2019/09/18 Javascript
用Python实现换行符转换的脚本的教程
2015/04/16 Python
解决tensorflow1.x版本加载saver.restore目录报错的问题
2018/07/26 Python
pytz格式化北京时间多出6分钟问题的解决方法
2019/06/21 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
《小动物过冬》教学反思
2014/04/17 职场文书
北京申奥口号
2014/06/19 职场文书
西游记读书笔记
2015/06/25 职场文书
小学五年级班主任工作经验交流材料
2015/11/02 职场文书
2016年第二十届“母亲节暨幸福工程救助贫困母亲活动日”活动总结
2016/04/06 职场文书
编写python程序的90条建议
2021/04/14 Python
Html5获取用户当前位置的几种方式
2022/01/18 HTML / CSS