基于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 框架使用教程 AJAX篇
Oct 11 Javascript
js获取图片大小的函数代码
Sep 20 Javascript
Jquery Uploadify上传带进度条的简单实例
Feb 12 Javascript
laytpl 精致巧妙的JavaScript模板引擎
Aug 29 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
Nov 13 Javascript
JS实现自适应高度表单文本框的方法
Feb 25 Javascript
jQuery实现动态添加和删除一个div
Aug 12 Javascript
jQuery实现响应鼠标滚动的动感菜单效果
Sep 21 Javascript
微信小程序实现全局搜索代码高亮的示例
Mar 30 Javascript
浅谈layui 绑定form submit提交表单的注意事项
Oct 25 Javascript
webpack5 联邦模块介绍详解
Jul 08 Javascript
vue 解决provide和inject响应的问题
Nov 12 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
smarty 原来也不过如此~~呵呵
2006/11/25 PHP
php中神奇的fastcgi_finish_request
2011/05/02 PHP
php实现html标签闭合检测与修复方法
2015/07/09 PHP
PHP简单留言本功能实现代码
2017/06/09 PHP
Laravel 6.2 中添加了可调用容器对象的方法
2019/10/22 PHP
JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
2008/11/03 Javascript
JQuery实现用户名无刷新验证的小例子
2013/03/22 Javascript
极力推荐一款小巧玲珑的可视化编辑器bootstrap-wysiwyg
2016/05/27 Javascript
简单实现的JQuery文本框水印插件
2016/06/14 Javascript
轻松掌握JavaScript状态模式
2016/09/07 Javascript
html5+CSS 实现禁止IOS长按复制粘贴功能
2016/12/28 Javascript
基于Vue实现timepicker
2017/04/25 Javascript
vue router2.0二级路由的简单使用
2017/07/05 Javascript
详解Node.js中的Async和Await函数
2018/02/22 Javascript
微信小程序使用map组件实现解析经纬度功能示例
2019/01/22 Javascript
使用vue开发移动端管理后台的注意事项
2019/03/07 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
理解python多线程(python多线程简明教程)
2014/06/09 Python
Python数据类型详解(一)字符串
2016/05/08 Python
Python Sqlite3以字典形式返回查询结果的实现方法
2016/10/03 Python
彻彻底底地理解Python中的编码问题
2018/10/15 Python
Python3的unicode编码转换成中文的问题及解决方案
2019/12/10 Python
pytorch标签转onehot形式实例
2020/01/02 Python
Python 实现向word(docx)中输出
2020/02/13 Python
OpenCV中VideoCapture类的使用详解
2020/02/14 Python
基于Python爬虫采集天气网实时信息
2020/06/05 Python
德国网上花店:Valentins
2018/08/15 全球购物
英国在线定制百叶窗网站:Swift Direct Blinds
2020/02/25 全球购物
sleep()方法和wait()方法的区别是什么
2012/11/17 面试题
幼儿园评语大全
2014/04/17 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
2015高考寄语集锦
2015/02/27 职场文书
校园广播稿范文
2015/08/19 职场文书
Vue Element UI自定义描述列表组件
2021/05/18 Vue.js
Windows中Redis安装配置流程并实现远程访问功能
2021/06/07 Redis