“key”是创建元素列表时需要包含的特殊字符串属性。
大多数类似数据的数据都以唯一标识符的形式具有“自然”键。但是,使用任意字符串时,情况并非如此。
考虑这个用例(我已经多次遇到过):API响应或其他外部源返回带换行符的字符串。您希望将每一行渲染为其自己的<p>
元素。
render() {
const text = 'Hello\nworld';
return text.split('\n').map((line) => (<p>{line}</p>));
}
每个<p>
都需要一个密钥。最明显的非索引键是line
,但它不一定是唯一的。输入很可能是'Hello\nHello\nworld\nHello
。
唯一合理的选择似乎是使用数组索引作为键,但人们普遍认为这是不好的做法:请参阅Index as a key is an anti-pattern,甚至还有一个非常流行的ESLint规则react/no-array-index-key执行此。
这种情况下的关键约定是什么?我很想使用索引作为键并禁用ESLint规则,但这绝对是最后的手段。