当前位置: 首页 > 面试题库 >

错误:不要在键中使用数组索引

吴正祥
2023-03-14
问题内容

我正在使用索引来生成列表中的密钥。但是,es-lint会为此产生一个错误。React
doc还指出,应将使用项目索引作为键作为最后的选择。

const list = children.map((child, index) =>
    <li key={index}> {child} </li>);

我考虑过使用react-key-indexnpm install react-key-index给出以下错误:

npm ERR! code E404

npm ERR! 404 Not Found: react-key-index@latest

关于允许生成唯一密钥的其他软件包有什么建议吗?关于反应密钥生成器的任何建议,我们将不胜感激!


问题答案:

当您使用数组的索引作为键时,React会优化并且不会按预期呈现。在这种情况下会发生什么可以用一个例子来解释。

假设父组件获取一个包含10个项目的数组,并基于该数组渲染10个组件。假设然后从数组中删除第5个项目。在下一次渲染时,父级将接收9个项目的数组,因此React将渲染9个组件。这将显示为删除的第10个组件,而不是第5个组件,因为React无法根据索引区分项目。

因此,始终使用唯一的标识符作为从项目数组中呈现的组件的键。

您可以通过使用唯一的子对象的任何字段作为键来生成自己的唯一键。正常情况下,可以使用子对象的任何id字段(如果有)。

编辑:如果组件创建并管理自己的状态,例如在不受控制的文本框,计时器等中,您将只能看到上述行为发生。



 类似资料:
  • 问题内容: 我已经声明了我的数组 然后我初始化它的值像 在运行时,它给出错误“数组索引超出范围” 问题答案: 正如评论员@C_X和@MartinR所说,您的数组为空。这是根据需要初始化的方法… …当然,如果您只想零,那么循环现在是多余的!

  • 我见过这样的阵列 我想把它变成这样 附:谢谢。

  • 问题内容: 参考原始的stackoverflow问题,我试图将gin索引应用于Postgres 9.4中数组对象中的键,但没有得到第一个答案中所述的结果。 您能纠正错误吗? 我遵循的步骤已写在下面。 第1部分:创建表和索引 第2部分:查询 该查询给出空结果。 我也尝试使用GIN索引。 替代索引和查询: 问题答案: 原始答案中的这个特定jsonb示例缺少用于包含查询的非原始对象周围的数组层。此后已修

  • 我有一个MongoDB版本3.0.3集合,其中包含具有2个字段的文档: 数字长id 我在数组上构建了一个多键索引,并通过使用方法确认该索引存在并且是多键的。但是,当我查询数组中特定字段的2个范围的交集时,Mongo不使用此索引,尽管集合中有1,000,000个文档。我可以从方法的输出中看到这一点。更奇怪的是,当我使用指定索引时,Mongo遍历了所有1,000,000个文档和60,000,000个索

  • 问题内容: 以下两个声明之间有什么区别? 和 是在堆栈上还是在堆上声明? 问题答案: 一个明显的区别是,一个全为零,另一个包含[1..5]。 但这是唯一的区别。两者都是5元素整数数组,都以相同的方式分配。用大括号声明不只是语法上的方便。 请注意,只有在声明数组时才能使用此形式: 但不是 要么 对象(数组是对象)在堆上分配。