首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在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

复制
相关文章
如何在PP中通过添加列计算移动平均?
(一) 通过添加列计算移动平均 表1 前提条件要点:日期列连续不中断 要求:计算5日平均值 1. 解题思路 计算5日平均值则只有在日期大于5日以后的,才会有5日均线 筛选出当前日期往上倒推5日的表,并
逍遥之
2020/03/24
2.1K0
如何在PP中通过添加列计算移动平均?
聊聊springboot项目数据库密码如何加密
在我们日常开发中,我们可能很随意把数据库密码直接明文暴露在配置文件中,在开发环境可以这么做,但是在生产环境,是相当不建议这么做,毕竟安全无小事,谁也不知道哪天密码就莫名其妙泄露了。今天就来聊聊在springboot项目中如何对数据库密码进行加密
lyb-geek
2022/01/07
2.8K0
聊聊springboot项目数据库密码如何加密
Linux系统平均负载是如何计算的?[通俗易懂]
关于负载的计算,它的结果是包含有小数的一个浮点数,内核中是不能使用float变量的,那么这里就采用了一个整型变量的低11位来表示小数部分。那么对于数值1来说,它就是FIXED_1,也就是需要对1进行左移11bit。实际上此时这个整型变量保存的值是1024。
全栈程序员站长
2022/10/02
2.4K0
如何使用python计算给定SQLite表的行数?
计算 SQLite 表中的行数是数据库管理中的常见任务。Python凭借其强大的库和对SQLite的支持,为此目的提供了无缝的工具。
很酷的站长
2023/08/11
6400
如何使用python计算给定SQLite表的行数?
聊聊springboot项目数据库密码如何加密
在我们日常开发中,我们可能很随意把数据库密码直接明文暴露在配置文件中,在开发环境可以这么做,但是在生产环境,是相当不建议这么做,毕竟安全无小事,谁也不知道哪天密码就莫名其妙泄露了。今天就来聊聊在springboot项目中如何对数据库密码进行加密
lyb-geek
2021/07/06
2.2K0
聊聊springboot项目数据库密码如何加密
计算平均分
/* 功能:计算平均分 日期:2013-04-01 */ #include<stdio.h> #include<stdlib.h> #include<math.h>
WindCoder
2018/09/20
7490
Android中SQLite数据库小计
用户1172465
2018/01/05
2.1K0
Qt中操作SQLite数据库
Qt SQL模块使用驱动程序插件(plugins)与不同的数据库API进行通信。由于Qt的SQL模块API与数据库无关,因此所有特定于数据库的代码都包含在这些驱动程序中。Qt提供了几个驱动程序,也可以添加其他驱动程序。提供驱动程序源代码,可用作编写自己的驱动程序的模型。
全栈程序员站长
2022/11/17
2.2K0
Qt中操作SQLite数据库
Power Pivot中如何计算具有相同日期数据的移动平均?
解释:这里需要2个条件,除了日历条件,还需要添加一个日期是否有值的条件,也就是汇总金额这里需要为非空。
逍遥之
2020/03/24
3.2K0
Power Pivot中如何计算具有相同日期数据的移动平均?
如何使用Python连接到驻留在内存中的SQLite数据库?
SQLite 是一种流行的、轻量级的、独立的数据库引擎,广泛用于各种应用程序。SQLite的独特功能之一是它能够在内存中创建数据库,这允许更快的数据访问和操作。在本文中,我们将探讨如何使用 Python 连接到内存中的 SQLite 数据库,提供分步说明、代码示例、解释和示例输出。
很酷的站长
2023/08/11
7920
如何使用Python连接到驻留在内存中的SQLite数据库?
如何在Power Pivot中通过添加列计算不连续日期移动平均?
之前我们讲了连续日期的移动平均的求法,那我们这次来看下如果不连续日期如何计算移动平均。
逍遥之
2020/03/24
2.2K0
如何在Power Pivot中通过添加列计算不连续日期移动平均?
「R」如何计算几何平均数
刚遇到一个有意思的问题,如何用R计算几何平均数。如果数字少,简单,计算很容易,直观上,先用prod函数连乘,然后开方即可。
王诗翔呀
2020/07/03
2.4K0
如何对已损坏的SQLite数据库取证分析?
SQLite是当今最流行的数据库之一,许多移动应用台式计算机以及便携式笔记本上都用它来存储数据(例如桌面工具、浏览器以及社交媒体软件等),因此SQLite在电子取证当中也扮演着举足轻重的角色。取证网络浏览器,信使和其他数字证据来源。 市面上有许多支持对SQLite数据库分析取证的工具,例如Magnet AXIOM,Belkasoft Evidence Center和BlackBag BlackLight等等。这些工具可以自动解析这些数据库,甚至可以从空闲列表和未分配空间中分割数据。此外,它们还提供了SQL
FB客服
2018/04/17
1.7K0
如何对已损坏的SQLite数据库取证分析?
sqlite数据库
比如手机程序对.db的不当操作造成. $ sqlite3 backup.sqlite sqlite> .output “_temp.tmp” sqlite> .dump sqlite> .quit
acc8226
2022/05/17
5410
【SQLite】C++链接SQLite数据库
C++链接SQLite数据库 相关参考: C++操作SQLITE获得查询结果集的几种方法总结 sqlite3: sqlite3_step 函数 SQLite3数据库API手册 好像还参考了一位老哥的文章,但是我记不清了,也有可能是我记错了。 为了更便于使用,我将它封装成了一个类。 common.h #ifndef COMMON_H__ #define COMMON_H__ #include <iostream> #include <unistd.h> #include <sqlite3.h> #in
半生瓜的blog
2023/05/13
9270
python 计算简单移动平均
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
2.2K0
查看sqlite_sqlite数据库手机版
用于SQLite的数据库浏览器(DB4S)是一种高质量,可视化的开源工具,用于创建,设计和编辑与SQLite兼容的数据库文件。
全栈程序员站长
2022/09/30
1.8K0
查看sqlite_sqlite数据库手机版
sqlite3 命令创建新的 SQLite 数据库方法
SQLite 的 sqlite3 命令被用来创建新的 SQLite 数据库。您不需要任何特殊的权限即可创建一个数据。
用户9236362
2021/11/29
2K0
Python中如何求列表list的平均数[通俗易懂]
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127125.html原文链接:https://javaforall.cn
全栈程序员站长
2022/07/25
2.2K0
点击加载更多

相似问题

在SQLite中按组计算加权平均

12

SQLITE -计算剩余项目数量

30

SQLite -计算移动平均

23

按类型计算项目数量

16

按降序计算列表中的项目数

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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