博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
react反模式之index作为key
阅读量:6760 次
发布时间:2019-06-26

本文共 1070 字,大约阅读时间需要 3 分钟。

react反模式之index作为key

我已经看到过很多React开发人员在渲染一个列表时使用index作为它的key

{todos.map((todo, index) =>     
)}

这样写看起来很优雅并且确实摆脱了react的警告信息,那么这样写有危险的地方吗?

  这样会破坏你的应用让其显示出错误的数据

下面我来解释下,key是React来识别DOM元素的唯一属性。如果你往数组里面增加一些元素或者从数组中间移除一些东西会发生些什么呢?如果key属性和以前一样React会认为DOM元素表示的组件和以前是一样的,但是那是错误的。

这里我有个来演示这个潜在的危险

index错误例子

事实证明,React 会用index作为默认的key的值因为这个时候React认为用index是最合理的。因此,React会警告你那样做是为达标准的(这样说看起来有点困惑. 如果你自己提供了key属性React会认为你知道自己在做啥. 记住这个例子,它可能会导致错误。

Better

列表里面的每一项都应该又一个永久并且唯一的属性,理想情况下应该在创建列表的时候分配下去. 当然我指的是id. 我们可以像下面这样使用它:

{todos.map((todo) =>     
)}

另外的实现方式是把编号递增添加到抽象方法中,使用一个全局的index来确保任何两个列表项的id不同。

todoCounter = 1;function createNewTodo(text) {    return {        completed: false,        id: todoCounter++,        text    }}

Much better

一个产品化的解决方案是它应该更加健壮,能够用来创建分散的列表项. 因此我强烈推荐一个npm包, 它可以快速的生成一系列‘短的 无序的 对url友好的 唯一的’ id,下面是示例代码:

var shortid = require('shortid');function createNewTodo(text) {    return {        completed: false,        id: shortid.generate(),        text    }}

TL;DR: 为每个列表项生成一个唯一的id,然后在渲染列表项时作为key属性传给列表项.

References and related articles

. and in React Docs

.
.
.

转载地址:http://vhbeo.baihongyu.com/

你可能感兴趣的文章
苹果官方的图标大小的调整
查看>>
观《构建之法》有感
查看>>
maven环境快速搭建(转)
查看>>
Python高级编程–正则表达式(习题)
查看>>
HDU 5742 It's All In The Mind
查看>>
ubuntu和Windows 下的GIF动图工具
查看>>
Visual Studio2012使用技巧
查看>>
编程思想
查看>>
经典布局样式
查看>>
C#下Emgucv的配置
查看>>
【Java基础】sun.misc.BASE64和Java 8 java.util.Base64区别
查看>>
使用PL/SQL连接Oracle时报错ORA-12541: TNS: 无监听程序
查看>>
Mac011--DbWrench Database安装
查看>>
[原]Flash研究(一)——本地通讯
查看>>
bootStrap table 和 JS 开发过程中遇到问题汇总
查看>>
VB 设置循环,以及弹出messageBox
查看>>
leetcode — search-a-2d-matrix
查看>>
魔板 bfs() 预处理,记录每种状态。然后状态置换,(重点要用到全排列的hash记录状态)...
查看>>
构建之法课后作业第一次作业(15个题选一个)
查看>>
操作redis方法
查看>>