reactjs - React 独特的 key 道具
问题描述
我在 React 文档中读到键不是全局唯一的,并且每个兄弟姐妹都应该是唯一的,但是为什么这段代码有效?
import React from 'react'
import ReactDOM from 'react-dom'
const people = [
{name: 'John', age: 20},
{name: 'Danny', age: 35},
{name: 'Rebecca', age: 18},
]
const element = (
<ul>
{people.map((person, index) => (
<li key={index}>{person.name}</li>
))}
{people.map((person, index) => (
<li key={index}>{person.name}</li>
))}
</ul>
)
ReactDOM.render(
element,
document.getElementById("root")
)
不是所有的结果<li>
元素都被认为是同级元素,那么为什么我没有收到任何警告说有两个元素具有相同的键?
解决方案
我认为文档中使用“兄弟姐妹”一词的方式是指 javascript 数组中的兄弟姐妹,这可能与渲染的 DOM 树中的兄弟姐妹不对应。所以<li/>
节点渲染到同一个<ul/>
父节点并不重要,React 会将它们视为两个不同的组件数组。
键只能在兄弟姐妹中唯一
数组中使用的键在它们的兄弟中应该是唯一的。但是,它们不需要是全球唯一的。当我们生成两个不同的数组时,我们可以使用相同的键。
https://reactjs.org/docs/lists-and-keys.html#keys-must-only-be-unique-among-siblings
推荐阅读
- objective-c - MSAL 中对 Mac 上 ObjectiveC 的代理支持
- database - GridFS 存储 GZIPOutputStream
- python - 在python中将cx_Oracle.LOB数据转换为字符串
- reactjs - 组件动画结束后重置 React 状态?
- flutter - 这个问题可以使用什么flutter包?
- python - 试图理解 Python 包装器
- logging - 如何使用主机应用程序提供的日志适配器从基于 Akka 的库中进行日志记录?
- c - Arduino IDE 找不到我的库目录 - Windows10
- neo4j - Neo4j 的 Cypher 查询中面临的语法问题
- ios - 具有从相同协议继承的自定义数据模型的构建列表 (ForEach)