React学习-列表循环中的特殊属性key

一、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} />
);
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值