当前位置: 首页 > news >正文

vue列表渲染中key的作用_React / Vue 项目时为什么要在列表组件中写 key,其作用是什么?...

部分讨论都是基于没有

{{ i }}

var vm = new Vue({

el: '#app',

data: {

dataList: [1, 2, 3, 4, 5]

}

})

以上的例子,v-for的内容会生成以下的dom节点数组,我们给每一个节点标记一个身份id:

[

'

1
', // id: A

'

2
', // id: B

'

3
', // id: C

'

4
', // id: D

'

5
' // id: E

]

改变dataList数据,进行数据位置替换,对比改变后的数据

vm.dataList = [4, 1, 3, 5, 2] // 数据位置替换

// 没有key的情况, 节点位置不变,但是节点innerText内容更新了

[

'

4
', // id: A

'

1
', // id: B

'

3
', // id: C

'

5
', // id: D

'

2
' // id: E

]

// 有key的情况,dom节点位置进行了交换,但是内容没有更新

//

{{ i }}

[

'

4
', // id: D

'

1
', // id: A

'

3
', // id: C

'

5
', // id: E

'

2
' // id: B

]

增删dataList列表项

vm.dataList = [3, 4, 5, 6, 7] // 数据进行增删

// 1. 没有key的情况, 节点位置不变,内容也更新了

[

'

3
', // id: A

'

4
', // id: B

'

5
', // id: C

'

6
', // id: D

'

7
' // id: E

]

// 2. 有key的情况, 节点删除了 A, B 节点,新增了 F, G 节点

//

{{ i }}

[

'

3
', // id: C

'

4
', // id: D

'

5
', // id: E

'

6
', // id: F

'

7
' // id: G

]

从以上来看,不带有key,并且使用简单的模板,基于这个前提下,可以更有效的复用节点,diff速度来看也是不带key更加快速的,因为带key在增删节点上有耗时。

这就是默认模式。但是这个并不是key作用,而是没有key的情况下可以对节点就地复用,提高性能。

这种模式会带来一些隐藏的副作用,比如可能不会产生过渡效果,或者在某些节点有绑定数据(表单)状态,会出现状态错位。VUE文档也说明了 这个默认的模式是高效的,但是只适用于不依赖子组件状态或临时 DOM 状态 (例如:表单输入值) 的列表渲染输出

原创文章,作者:犀牛前端部落,如若转载,请注明出处:https://www.pipipi.net/2735.html

相关文章:

  • vuepress侧边栏配置_侧边栏(sidebar) - VuePress 中文文档
  • python编写性别比例_python实现爬虫统计学校BBS男女比例(一)
  • iphone原彩显示对眼睛好吗_iPhone x手机原彩显示烧屏怎么办呢
  • linux 启动nacos报错_Nacos部署中的一些常见问题汇总
  • 中科院aibench_CVPR2019人脸防伪检测挑战赛Top3论文代码及模型解析
  • flutter 页面加载动画_为页面切换加入动画效果
  • 可变悬挂与空气悬挂的区别_可调悬挂和空气悬挂有什么区别啊,求解释
  • base64图裁剪 php_php解析base64数据生成图片的方法
  • cahrt框架 ios_iOS使用Charts框架绘制柱形图
  • 关于python搞笑段子精选_你能讲一个让人瞬间爆笑的笑话吗?
  • php yield 个人小解_php 新特性之yield大数组处理优化
  • div盒子边距_CSS | 盒子模型之外边距(margin)
  • php mongodb 按照日期统计_PHP程序员应该掌握哪些技术?
  • 图片在section上下居中_停!你的时间不应该花在无谓的图片/文字对齐上
  • python小课堂28_python课堂整理28----re模块
  • [iOS]Core Data浅析一 -- 启用Core Data
  • 「译」Node.js Streams 基础
  • 【跃迁之路】【444天】程序员高效学习方法论探索系列(实验阶段201-2018.04.25)...
  • 5、React组件事件详解
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Apache的基本使用
  • Cumulo 的 ClojureScript 模块已经成型
  • If…else
  • JS创建对象模式及其对象原型链探究(一):Object模式
  • MySQL几个简单SQL的优化
  • MYSQL如何对数据进行自动化升级--以如果某数据表存在并且某字段不存在时则执行更新操作为例...
  • nodejs实现webservice问题总结
  • php面试题 汇集2
  • 笨办法学C 练习34:动态数组
  • 前端存储 - localStorage
  • 前端每日实战:70# 视频演示如何用纯 CSS 创作一只徘徊的果冻怪兽
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 驱动程序原理
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 它承受着该等级不该有的简单, leetcode 564 寻找最近的回文数
  • 微服务核心架构梳理
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • 进程与线程(三)——进程/线程间通信
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (1)Map集合 (2)异常机制 (3)File类 (4)I/O流
  • (11)工业界推荐系统-小红书推荐场景及内部实践【粗排三塔模型】
  • (13)Latex:基于ΤΕΧ的自动排版系统——写论文必备
  • (2.2w字)前端单元测试之Jest详解篇
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (三十五)大数据实战——Superset可视化平台搭建
  • (一)pytest自动化测试框架之生成测试报告(mac系统)
  • (原)Matlab的svmtrain和svmclassify
  • .htaccess配置重写url引擎
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .sdf和.msp文件读取
  • [@Controller]4 详解@ModelAttribute
  • [2016.7 Day.4] T1 游戏 [正解:二分图 偏解:奇葩贪心+模拟?(不知如何称呼不过居然比std还快)]
  • [Android]如何调试Native memory crash issue
  • [ARC066F]Contest with Drinks Hard
  • [bbk5179]第66集 第7章 - 数据库的维护 03