React 等框架使用 index 做 key 的问题
React 等框架使用 index 做 key 的问题
假如有两个树,一个是之前,一个是更变之后,我们抽象成两种可能性。
- 插入内容在最后
- 插入内容在最前
关于插在中间,原理一样,就不阐述。
使用 ul 代表树,并且使用了 index 做 key:
<ul>
<li key="{0}">00000</li>
<li key="{1}">11111</li>
</ul>
先说原理
diff 树的时候,是一句一句往下的,所以是:ul -> li -> li -> ... 这样的过程,注意是对比。
插在最后
则变成这样:
<ul>
<li key="{0}">00000</li>
<li key="{1}">11111</li>
<li key="{2}">22222</li>
</ul>
对比原来的,是这样的场景:
- ul 一样,不用重新搞
- li 的 key 是 0,一样,不用重新搞
- li 的 key 是 1,一样,不用重新搞
- 恩,多了一个 li,key 是 2,加上去
简单理解来说,可以当做做了一步。
插在最前面
则应该变成这样:
<ul>
<li key="{0}">22222</li>
<li key="{1}">00000</li>
<li key="{2}">11111</li>
</ul>
对比原来的,是这样的场景:
- ul 一样,不用重新搞
- li 的 key 是 0,一样,不用重新搞
- li 的 key 是 1,一样,不用重新搞
- 恩,多了一个 li,key 是 2,加上去
最后就可能出现这样的结果:
<ul>
<li key="{0}">00000</li>
<li key="{1}">11111</li>
<li key="{2}">11111</li>
</ul>
差不多就这个意思,所以还是使用独立标记,比如:id 这种靠谱。
React 等框架使用 index 做 key 的问题的更多相关文章
- v-for为什么要加key,能用index作为key么
前言 在vue中使用v-for时,一直有几个疑问: v-for为什么要加key 为什么有时候用index作为key会出错 带着这个疑问,结合各种博客和源码,终于有了点眉目. virtual dom 要 ...
- UmiJS可插拔的企业级 react 应用框架,配合ant-design-pro使用
入门非常简单 # 安装 $ yarn global add umi # 或者 npm install -g umi # 新建应用 $ mkdir myapp && cd myapp # ...
- React Native框架如何白盒测试-HIPPY接口测试架构篇
本文转载自腾讯TMQ团队 ,侵权删. 1.开天辟地 Hippy是什么呢?简单点,能用JavaScript来写Android和iOS应用的框架, 类似业界的React Native. 好吧,我们还是严谨 ...
- react实战 : 用矩阵思想做一个自适应布局容器组件
需求是这样的. 有一个需要显示若干方块型元素的小区域 数量比较少的时候显示一排 数量比较多的时候显示两排 用 grid 不好,因为当数量为奇数的时候需要两排里面的元素都乖乖的居中显示. 用 flex ...
- 13个精选的React JS框架
如果你正在使用 React.js 或 React Native 创建用户界面,可以试一试本文推荐的这些框架. React.js 和 React Native 是流行的用户界面(UI)开发平台,且都是开 ...
- (转)PowerDesigner提示Existence of index、key、reference错误
建立一个表后,为何检测出现Existence of index的警告 A table should contain at least one column, one index, one key ...
- PowerDesigner 提示 Existence of index、key、reference错误
一.建立一个表后,为何检测出现Existence of index的警告 A table should contain at least one column, one index, one key, ...
- INDEX && PRIMARY KEY && UNIQUE KEY
When I have do some sql tody, some confusion come up to me. Its about the index && PRIMARY K ...
- Unity3D研究之多语言用中文做KEY
做多语言的时候用中文做KEY绝对是有100%的优点,假设用英文表示那么代码里面给文字赋值的地方全都是英文.写的代码多了以后维护起来就没有人能看懂了,或者看起来非常费劲. 对PoolManager ...
随机推荐
- CSS3伪类和伪元素
作为一个CSS3初学不久者来说,很容易混淆单冒号(:)和双冒号(::)的用法,以为两者可以互换着来使用.我自己之前也混淆过他们,因为两者看起来太相像了,就像孪生兄弟.但实际上,他们的区别还是挺大的,最 ...
- MVP架构分析与搭建
一个项目的核心就是架构 1.什么是MVP:MVP是一种项目架构设计模式. 其实MVP的本质就是将view和model完全隔离出来,通过Presenter (主持人) 统一调度管理.
- 【Java入门提高篇】Day27 Java容器类详解(九)LinkedList详解
这次介绍一下List接口的另一个践行者——LinkedList,这是一位集诸多技能于一身的List接口践行者,可谓十八般武艺,样样精通,栈.队列.双端队列.链表.双向链表都可以用它来模拟,话不多说,赶 ...
- (网页)Uncaught ReferenceError: pageImport is not defined
在js开发中,很多人遇到类似问题,都找不到解决方法.Uncaught ReferenceError: $ is not defined,在这里给大家提供几个解决方法. 1.出现这个错误,最可能的是引用 ...
- mysql8 :客户端连接caching-sha2-password问题
在安装mysql8的时候如果选择了密码加密,之后用客户端连接比如navicate,会提示客户端连接caching-sha2-password,是由于客户端不支持这种插件,可以通过如下方式进行修改: # ...
- Linux文件和目录的粘滞位(sticky bit)
今天维护系统时发现一个非常诡异的问题:AAA用户和BBB用户同属AAA组,但用AAA用户创建的文件,权限设置为777后,还是不能用BBB用户删除.诡异! 几经周转,发现AAA用户创建文件位置的上层目录 ...
- 【PAT】B1041 考试座位号(15 分)
/* */ #include<stdio.h> #include<algorithm> using namespace std; struct stu{ char number ...
- 17秋 软件工程 团队第五次作业 Alpha Scrum7
17秋 软件工程 团队第五次作业 Alpha Scrum7 今日完成的任务 世强:部员详情列表的编写与数据交互,完善APP通知模块: 港晨:完成前端登陆界面编写: 树民:完善Web后端数据库访问模块: ...
- <20190103>别傻了,一些 新的技术注定只适合新人
故障现象: 用vmware跑的虚拟机不兼容 某银行网银的U盾. 插入usb口后无法识别U盾, 解决过程: 1 更换2台各自不同电脑, 使用前置USB口, 后置USB口. 故障依旧. 2 使 ...
- Android应用启动、退出分析
http://www.jianshu.com/p/72059201b10a §AMS和应用进程 §应用启动流程 §应用退出流程 §启动.退出消息 AMS和应用进程 应用进程 <- 系统管理 &l ...