一、v-for中的key是为什么存在呢?

这是vue官网给key的定义,key主要用于vue的虚拟dom算法。新的问题出现了,vue的虚拟dom算法是什么?

二、虚拟domg算法

我们的程序在运行时,状态会不断发生变化。每当状态发生变化时,都需要重新渲染真实dom,但渲染真实DOM是非常耗费性能的
 
所以出现了虚拟DOM,虚拟DOM是通过状态生成一个虚拟节点树,然后使用虚拟节点树去渲染真实DOM
在重新渲染之前,会使用新生成的虚拟节点树和旧的虚拟节点树进行对比,只渲染不同的部分,这就是diff算法
 
diff算法做比较时,主要靠比较虚拟dom树节点的类型和key,判断是否是同一节点,是同一节点就更新属性,否则就丢弃旧节点,然后新增
 
三、经典问题,为什么不推荐使用index做v-for的key?
 
1.假设我们用 [1,2,3,4,5] 渲染了5个div节点,index做key。
现在要在 1,2 两个div中间新增一个x节点,那么实际更新时是 2,3,4,5更新为x,2,3,4  同时新增了一个节点5,是不是很浪费性能
 
2.用index做key可能会有bug

所以尽量不要使用index做key。

以上。

从v-for的key说起的更多相关文章

  1. System v shm的key

    shmget函数用于创建或打开一个共享内存区对象,shmget成功调用会返回一个共享内存区的标识符,供其它的共享内存区操作函数使用. key:用于创建共享内存区的键值,这个在前面其他System IP ...

  2. Java集合源码分析(七)HashMap<K, V>

    一.HashMap概述 HashMap基于哈希表的 Map 接口的实现.此实现提供所有可选的映射操作,并允许使用 null 值和 null 键.(除了不同步和允许使用 null 之外,HashMap  ...

  3. HashMap的key可以是可变的对象吗???

    大家都知道,HashMap的是key-value(键值对)组成的,这个key既可以是基本数据类型对象,如Integer,Float,同时也可以是自己编写的对象,那么问题来了,这个作为key的对象是否能 ...

  4. php 一维数组排序,保留key值

    function sort_with_keyName($arr,$orderby='desc'){ //在内存的另一处 $a 复制内容与 $arr 一样的数组 foreach($arr as $key ...

  5. cglib源码分析(一): 缓存和KEY

    cglib是一个java 字节码的生成工具,它是对asm的进一步封装,提供了一系列class generator.研究cglib主要是因为它也提供了动态代理功能,这点和jdk的动态代理类似. 一. C ...

  6. java Map使用Object 做为Key的问题

    近期在看dnsjava 源码的时候,不经意间发现一个自己没有想过的问题: HashMap 如何使用key去查找对应的value的,这个问题很难用语言描述的清楚,那就使用代码来进行说明吧! public ...

  7. Volist标签 key值的使用

    Volist标签是thinkphp框架view中常用到的一个标签.主要用于在模板中循环输出数据集或者多维数组.今天使用key属性时出了点问题,记录一下. volist标签(循环输出数据) 闭合 非闭合 ...

  8. Android tp的虚拟按键(virtual key)处理

    Android tp的虚拟按键处理 现在在越来越多的Android的手机都是虚拟按键来操作,但是对于开发者来说可能会关心Android对虚拟按键如何处理的.对Linux熟悉的人可能会说,it's ea ...

  9. 参考storm中的RotatingMap实现key超时处理

    storm0.8.1以后的RotatingMap完全可以独立于storm用来实现hashmap的key超时删除,并调用回调函数 RotatingMap.java: import java.util.H ...

  10. React之key详解

    一个例子 有这样的一个场景如下图所示,有一组动态数量的input,可以增加和删除和重新排序,数组元素生成的组件用index作为key的值,例如下图生成的ui展示: 上面例子中的input组件渲染的代码 ...

随机推荐

  1. CodeForces - 1336A Linova and Kingdom

    CodeForces - 1336A 就差一点点,很可惜,少发现个很显而易见的结论 就是一个点的价值,实际上就是(这个点的深度 - 之后的点的数目) 就是 \(depth_i - size_i\) 然 ...

  2. Limit线段树题单题解(更新中)

    P3373 线段树模板 2 \(1 \leq n \leq 10^5\) 题解:考查标记与标记的合并 我们考虑打两个懒惰标记实现区间乘和区间加 线段树维护区间和 对于信息与信息的合并:左儿子加上右儿子 ...

  3. CSS3 过渡和动画

    1.CSS过渡 含义:在没有过渡属性的时候,当一个元素的属性值发生变化时,浏览器就会将这个元素瞬间渲染成新属性值的样式.例如一个定位元素top:0,动态修改成top:100px,这个元素就瞬间跑到10 ...

  4. uniapp 坑 - sslVerify不支撑离线打包

    uniapp 打包为Android的apk时,由于适用https和自签证书,离线打包不支撑sslVerify,导致出现Trust anchor for certification path not f ...

  5. JVM 语言的探索发现

    又在 WIKI 上溜达了一下 https://en.wikipedia.org/wiki/List_of_JVM_languages,有一些新的发现: ColdFusion Markup Langua ...

  6. 【C#】【平时作业】习题-2-数据类型运算符表达式

    目录 1.请设计程序,验证算数运算符和赋值运算符. Int a,b,c C=a+b += privatevoid button1_Click(object sender, EventArgse) { ...

  7. SpringBoot结合Liquibase实现数据库变更管理

    https://juejin.cn/post/7171232605478584328 https://juejin.cn/post/7170857098538909732 前言 研发过程中经常涉及到数 ...

  8. Shell_Shell 脚本中字符串的相关操作

    在我们的shell 编程中,一个必不可少的操作就是针对于字符串的操作, 重要有字符串替换,计算字符串长度 等等... 原文地址: https://blog.csdn.net/github_337369 ...

  9. 【转载】理解分布式id生成算法SnowFlake

    分布式id生成算法的有很多种,Twitter的SnowFlake就是其中经典的一种. https://segmentfault.com/a/1190000011282426 概述 SnowFlake算 ...

  10. Qt/C++地图轨迹回放/自定义图标/动态平滑移动/导入轨迹数据/支持各种地图包括天地图

    一.前言说明 这个轨迹回放的功能迭代过很多个版本,最初的版本是轨迹点的坐标每次都是删除折线再重新生成折线,后面发现有内存泄漏,地图js中并不会及时的释放没有用的对象,哪怕是用地图提供的clearove ...