keys 只在數組的上下文中存在意義。
例如,如果你提取 一個 ListItem
組件,應該把 key 放置在數組處理的 <ListItem />
元素中,不能放在 ListItem
組件自身中的 <li>
根元素上
function ListItem(props) {
const value = props.value;
return (
// 錯誤!不需要在這裏指定 key:
<li key={value.toString()}>
{value}
</li>
);
}
function NumberList(props) {
const numbers = props.numbers;
const listItems = numbers.map((number) =>
// 錯誤!key 應該在這裏指定:
<ListItem value={number} />
);
return (
<ul>
{listItems}
</ul>
);
}
const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
<NumberList numbers={numbers} />,
document.getElementById('root')
);
在數組中使用的 keys 必須在它們的同輩之間唯一。然而它們並不需要全局唯一。我們可以在操作兩個不同數組的時候使用相同的 keys
function Blog(props) {
const sidebar = (
<ul>
{props.posts.map((post) =>
<li key={post.id}>
{post.title}
</li>
)}
</ul>
);
const content = props.posts.map((post) =>
<div key={post.id}>
<h3>{post.title}</h3>
<p>{post.content}</p>
</div>
);
return (
<div>
{sidebar}
<hr />
{content}
</div>
);
}
const posts = [
{id: 1, title: 'Hello World', content: 'Welcome to learning React!'},
{id: 2, title: 'Installation', content: 'You can install React from npm.'}
];
ReactDOM.render(
<Blog posts={posts} />,
document.getElementById('root')
);