首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何在React.js上解析“警告:遇到两个密钥相同的子”

如何在React.js上解析“警告:遇到两个密钥相同的子”
EN

Stack Overflow用户
提问于 2019-02-23 08:35:50
回答 5查看 16.7K关注 0票数 2

我试图使用api中的数据,但是当我试图呈现数据时,我得到了以下错误:

警告:遇到两个具有相同密钥的孩子,[object Object]。键应该是唯一的,这样组件就可以在更新中维护其标识。非唯一的键可能会导致子键被复制和/或省略--这种行为是不支持的,并且可能在将来的版本中更改。

这是CodeSandbox的原型..。也许这是一个简单的问题,但我几天前就开始研究反应了。你能帮帮我吗?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2019-02-23 08:44:01

变化

代码语言:javascript
运行
AI代码解释
复制
<h2 key={movie.toString()}>{movie.title}</h2>

代码语言:javascript
运行
AI代码解释
复制
<h2 key={movie.id}>{movie.title}</h2>

解释:

React要求列表类组件的每一行都有一个唯一的键。它使用此键确定自上次呈现以来更改的内容。否则,列表更改的方式可能会不明确。

movie.toString()并不是唯一的。它计算出每一行的"[object Object]"值。

查看您正在调用的API,您可能需要执行以下更多的操作:

代码语言:javascript
运行
AI代码解释
复制
<h2 key={movie.event.id}>{movie.event.title}</h2>
票数 4
EN

Stack Overflow用户

发布于 2020-11-17 11:31:09

当您在呈现呈现函数内的映射函数中的React组件时,您必须为每个组件提供唯一的密钥支柱,否则React将在控制台中放置警告,并且在组件重发时可能会或不正确地更新您的组件。最常见的错误之一是使用对象作为键。不管传入对象的具体细节如何,对象都会通过对对象对象的反应而变得紧张。所以两个完全不同的对象会有相同的键。如果发生这种情况,您将在控制台中看到类似于以下警告的内容:

警告:遇到两个具有相同键的子对象对象。键应该是唯一的,这样组件就可以在更新中维护其标识。非唯一的键可能会导致子键被复制和/或省略--这种行为是不支持的,并且可能在将来的版本中更改。

代码语言:javascript
运行
AI代码解释
复制
render() {
return (
    <div>
        {this.state.users.map(user => (
            <UserComponent user={user} key={user} />
        ))}
    </div>
)

}

另一个常见的错误是对键使用数组索引。

代码语言:javascript
运行
AI代码解释
复制
render() {
return (
    <div>
        {this.state.users.map((user, idx) => (
            <UserComponent user={user} key={idx} />
        ))}
    </div>
)

}

解决方案A关键支柱应该是独特的,稳定的和可重复的。

唯一:元素的键在其兄弟姐妹之间应该是唯一的。关键不需要是全球唯一的。这是使用对象作为键的问题,因为任何对象的字符串形式都是相同的。

稳定:某个元素的关键应该总是相同的。这就是为什么使用数组索引会导致错误。如果用户ABC位于索引0,然后移动到索引1,则组件将不会重发,因为键是相同的,即使连接到这些键的数据已经更改。

可复制性:每次都应该能够为对象获取相同的密钥。一般来说,这意味着不对键使用随机值。

在这种情况下,最佳做法是使用支持对象的唯一ID。在本例中,应该存储在数据库中的用户ID。但是,可以使用其他散列函数来获得类似的结果。

代码语言:javascript
运行
AI代码解释
复制
render() {
return (
    <div>
        {this.state.users.map((user, idx) => (
            <UserComponent user={user} key={user.id} />
        ))}
    </div>
)

}

https://sentry.io/answers/defining-proper-key-in-props/

票数 2
EN

Stack Overflow用户

发布于 2019-11-10 08:01:35

变化

代码语言:javascript
运行
AI代码解释
复制
<h2 key={movie.toString()}>{movie.title}</h2>

代码语言:javascript
运行
AI代码解释
复制
<h2 key={movie.id}>{movie.title}</h2>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54843682

复制
相关文章
(转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController
原文链接:https://www.cnblogs.com/ludashi/p/4791826.html
VV木公子
2018/06/05
5.6K0
(转)iOS开发之UICollectionViewController系列(一) :Ready CollectionViewController
iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
之前用CollectionViewController只是皮毛,一些iOS从入门到精通的书上也是泛泛而谈。这几天好好的搞了搞苹果的开发文档上CollectionViewController的内容,亲身体验了一下CollectionViewController的强大,之前一直认为CollectionView和TableView用法差不多,功能应该也是类似的。TableView的功能就已经很强大了,,CollectionView就是TableView的升级版,其功能更为强大。以后的几篇博客中好好的研究一下Col
lizelu
2018/01/11
1.7K0
iOS开发之窥探UICollectionViewController(一) -- Ready Your CollectionViewController
(转)iOS开发之UICollectionViewController系列(四) :一款功能强大的自定义瀑布流
原文链接:https://www.cnblogs.com/ludashi/p/4831487.html
VV木公子
2018/06/05
5.5K0
(转)iOS开发之UICollectionViewController系列(四) :一款功能强大的自定义瀑布流
iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
在上一篇博客中《iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流》,自定义瀑布流的列数,Cell的外边距,Cell的最大以及最小高度是在我们的布局文件中是写死的,换句话说也就是不可配置的。为了循序渐进,由浅入深呢,上篇博客暂且那么写。不过那样写太过死板,本来使用起来比较灵活的自定义布局,如果把其配置参数给写死了,就相当于在笼中的猛兽,再厉害不也白扯蛮。 在今天这篇博客中我们要接着上篇博客中的Demo,使其自定义布局的属性在使用它
lizelu
2018/01/11
6960
iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
(转)iOS开发之UICollectionViewController系列(三) :UICollectionView自定义瀑布流
原文链接:https://www.cnblogs.com/ludashi/p/4826818.html
VV木公子
2018/06/05
6.1K0
(转)iOS开发之UICollectionViewController系列(三) :UICollectionView自定义瀑布流
导出文件时,responseType设置为'arraybuffer'出错?
由于请求的时候设置了responseType:’arraybuffer’,返回的是数据流,要取得json信息需要进行转换:
用户2323866
2021/06/23
2.7K0
iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
在上一篇博客中《iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流》,自定义瀑布流的列数,Cell的外边距,Cell的最大以及最小高度是在我们的布局文件中是写死的,换句话说也就是不可配置的。为了循序渐进,由浅入深呢,上篇博客暂且那么写。不过那样写太过死板,本来使用起来比较灵活的自定义布局,如果把其配置参数给写死了,就相当于在笼中的猛兽,再厉害不也白扯蛮。 在今天这篇博客中我们要接着上篇博客中的Demo,使其自定义布局的属性在使用它
lizelu
2018/01/11
8320
iOS开发之窥探UICollectionViewController(四) --一款功能强大的自定义瀑布流
iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
上篇博客的实例是自带的UICollectionViewDelegateFlowLayout布局基础上来做的Demo, 详情请看《iOS开发之窥探UICollectionViewController(二) --详解CollectionView各种回调》。UICollectionView之所以强大,是因为其具有自定义功能,这一自定义就不得了啦,自由度非常大,定制的高,所以功能也是灰常强大的。本篇博客就不使用自带的流式布局了,我们要自定义一个瀑布流。自定义的瀑布流可以配置其参数: 每个Cell的边距,共有多少列,
lizelu
2018/01/11
1.4K0
iOS开发之窥探UICollectionViewController(三) --使用UICollectionView自定义瀑布流
【IOS开发基础系列】UICollectionView专题
        UICollectionView是一种新的数据展示方式,简单来说可以把他理解成多列的UITableView(请一定注意这是UICollectionView的最最简单的形式)。
江中散人_Jun
2023/10/16
9950
【IOS开发基础系列】UICollectionView专题
细述Kubernetes和Docker容器的存储方式
#####集合视图的作用 集合视图是为了增强网格视图开发而在IOS6中开放的集合视图API。 #####集合视图的组成 集合视图有4个重要的组成部分,分别为:
全栈程序员站长
2021/07/07
1.5K0
数组越界为什么没有出错
数组越界 在C语言中, 数组属于构造数据类型。一个数组可以分解为多个数组元素,这些数组元素可以是基本数据类型或是构造类型。因此按数组元素的类型不同,数组又可分为数值数组、字符数组、指针数组、结构数组等各种类别。 那什么是数组? 首先,我们应该知道数组,就是相同数据类型的元素按一定顺序排列的集合,就是把有限个类型相同的变量用一个名字命名,然后用编号区分他们的变量的集合,这个名字称为数组名,编号称为下标。(下标通常从0开始算起:0、1、2、…n。) 组成数组的各个变量称为数组的
编程范 源代码公司
2018/04/18
2.2K0
数组越界为什么没有出错
UICollectionView
平常我在业务开发中,绝大部分情况都是使用的UITableView,而UICollectionView则是在极少情况下才会去使用,这就导致了我对UICollectionView略感陌生。本篇文章就是以二者对比的方式对UICollectionView做一个小总结。
拉维
2019/08/12
1.2K0
IOS基金会_ UICollectionView简单易用
一种是继承UICollectionViewController,这个Controller会自带一个UICollectionView。
全栈程序员站长
2022/07/06
3690
win10想开测试模式,提示“设置元素数据时出错
系统中按WIN键,搜索栏输入‘CMD’,右键点击找到的cmd.exe,选择‘以管理员身份运行’。输入:bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS回车,再次输入:bcdedit -set TESTSIGNING ON,即可开启测试模式。实际操作结果看图;
周小董
2019/03/25
6.5K0
win10想开测试模式,提示“设置元素数据时出错
没有Eureka,但多了Nacos
Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。
battcn
2018/08/03
1.6K0
没有Eureka,但多了Nacos
给UICollectionView设置组背景和组圆角-Swift
最近由于我们的UI设计钟情于圆角搞得我很方,各种圆角渐变,于是就有了下面这篇给UICollectionView的组设置圆角和背景色的一个小封装,拿出来和大家分享一下,里面的具体的一下细节都在代码注释里面,大家留意下代码注释就好。我们理一下大致的一个思路。
Mr.RisingSun
2020/06/19
3.7K2
iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局
        前面的博客介绍了UICollectionView的相关方法和其协议中的方法,但对布局的管理类UICollectionViewFlowLayout没有着重探讨,这篇博客介绍关于布局的相关设置和属性方法。
珲少
2018/08/16
2K0
iOS流布局UICollectionView系列三——使用FlowLayout进行更灵活布局
iOS开发之UICollectionViewDataSourcePrefetching
在iOS10中,苹果为UICollectionViewCell引入了Pre-Fetching预加载机制用于提升它的性能。主要引入了一个新的数据源协议UICollectionViewDataSourcePrefetching,包含两个方法: @protocol UICollectionViewDataSourcePrefetching <NSObject> @required // 预加载数据 - (void)collectionView:(UICollectionView *)collectionView
YungFan
2018/05/03
2.2K0
iOS开发之UICollectionViewDataSourcePrefetching
启动hive出错,提示没有权限
在hive的配置文件定义了/usr/local/hive/iotmp文件夹,使用root账号创建了该文件夹,运行hive时使用的是hadoop账号,所以导致该问题。
全栈程序员站长
2022/07/20
2K0
启动hive出错,提示没有权限
iOS流布局UICollectionView系列一——初识与简单使用UICollectionView
        UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似。简单来说,UICollectionView是比UITbleView更加强大的一个UI控件,有如下几个方面:
珲少
2018/08/16
3.2K0
iOS流布局UICollectionView系列一——初识与简单使用UICollectionView

相似问题

UICollectionViewController:[UICollectionViewController loadView]加载了“标识符”nib,但没有得到UICollectionView

48

没有UICollectionViewController,我们如何使用UICollectionView

10

使用核心数据,我得到了一个错误'nib但没有得到UICollectionView‘。

14

如何修复"nib但没有得到UITableView“错误?

311

加载了nib,但没有得到UITableView异常

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档