【发布时间】:2019-02-11 05:57:36
【问题描述】:
我已经研究 react 一年多了。我主要使用 .map、.forEach、.filter 或使用 Object.keys 和 Object.values 迭代数组(如果它是一个对象)。
但是向 jsx 元素添加唯一键的不同方法是什么。以下是我到现在为止的习惯
使用数据中的唯一 id 作为 key 到 key prop:
const data= [{"id": "01", "name": "abc"}, {"id": "02", "name": "xyz"}];
render(){
const items = data.map(item => {
return <span key={item.id}>{item.name}</span>;
}
return(
<div>
{items}
</div>
)
}
使用索引作为 key 的 key 属性:
const data= [{"id": "01", "name": "abc"}, {"id": "02", "name": "xyz"}];
render(){
const items = data.map((item, i) => {
let keyValue = i+1;
return <span key={keyValue}>{item.name}</span>;
}
return(
<div>
{items}
</div>
)
}
除了我上面提到的以及最有效和推荐的方法之外,还有其他方法可以为 jsx 元素添加唯一键吗?
【问题讨论】:
-
添加它们如何并不重要。重要的是实际内容具有一些唯一标识符,以防元素以不同的顺序重新呈现。
index几乎总是不正确的,因为索引总是按数字顺序排列,而实际上保证不会出现数据。您不能只是“添加”一个唯一的 jsx 密钥并希望获得最好的结果。除非您的 jsx 内容实际上没有唯一标识符,否则请使用index,因为它对 React 的协调算法无关紧要,因为重复内容是一种已知的可能性。 docs -
谢谢。如果我在数据中没有唯一 id 并且除了使用索引之外,还有其他方法可以添加唯一键吗?
-
为什么?要么数据是唯一的,并且它具有唯一标识它的东西,要么它没有,并且密钥基本上是无用的
-
我们正在转向其他主题。我的问题的目的是了解除了使用数据和索引中的 id 之外,是否还有其他方法可以向 jsx 元素添加唯一键。您还说 Keys 是无用的,但是当我们在迭代期间不添加 key prop 时,为什么 react 会向我们显示警告?
-
随机数呢?还是一个uuid生成器?有很多方法可以创建随机(唯一)值,但它们不能帮助 React 的协调算法确定要保留的内容
标签: javascript arrays reactjs loops key