一、key的作用
1. key 帮助react确定list中哪些item已更改,添加或删除。
2. 便于在dom变化后,对比新旧DOM具体哪些item已变化,加快虚拟dom渲染和性能提升
二、key的使用注意事项
1. 使用数组下标做key是不被推荐的,如果遇到数组排序的情况下,将降低渲染性能。
const todoItems = todos.map((todo, index) =>
// 只有在没有id的情况下,才考虑使用数组下标
<li key={index}>
{todo.text}
</li>
);
2.数组中的key在其兄弟是独一无二的,但在全局并不一定是唯一的。
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')
);
3.key的值无法传递到子组件中,若要实现相同数据的传递,可使用其他名称作为属性名。访问key的值会返回undefined
const content = posts.map((post) =>
<Post
key={post.id}
id={post.id}
title={post.title} />
);