【发布时间】:2017-10-21 20:41:16
【问题描述】:
React 要求您在数组中的元素上具有唯一的 key 属性。 React docs 建议使用数据中的 id。如果您没有id,那么您可以将数组索引用作“最后的手段”,但需要注意的是,当可以重新排序项目时,使用索引可能会导致性能问题。在从多个源数组构建元素数组并多次调用.map() 时,我也遇到了一些烦人的问题,每次调用都有不同的转换,在这种情况下,数组索引无论如何都不会是唯一的。
我已经开始在我的组件中加入以下样板:
constructor(props) {
super(props);
this.getId = this.getId.bind(this);
this.id = 0;
}
getId() {
return this.id++;
}
可以这样使用:
render() {
const items = this.props.greetings.map(text => ({
<li key={this.getId()}>{text}</li>
}));
return (
<ul>
{items}
</ul>
);
}
这很简单,速度很快,并且没有使用数组索引的问题,但我不知道这种方法是否有任何问题,或者我忽略了更好的替代方案。这是不好的做法吗?还有其他没有数组索引问题的生成keys 的简单方法吗?
【问题讨论】:
-
keyprop 不需要是整数。您可以将任何字符串传递给键。因此,如果您的text道具在其他兄弟组件中是唯一的,您可以将其作为key道具传递。 -
@bennygenel 这是一个人为的例子。您可以假设
text不保证是唯一的。
标签: reactjs