React关于渲染列表时的key属性

在React中,使用`map()`遍历数组创建组件时,应当注意合理设置key属性。虽然可以使用元素索引作为key,但这样做在元素删除时可能导致问题。通常推荐使用唯一标识,如元素ID,来确保key的唯一性。key只对React有意义,不会传递给组件。在组件嵌套情况下,key应添加到最外层组件。避免使用索引作为key,以保证列表项的正确区分和性能。
摘要由CSDN通过智能技术生成

使用 JS 中的 map() 方法来遍历数组,可以把数组中的每个元素都映射成 <li> 标签或者其他组件

可以将以下内容插入到jsx里:

///let arr=[1,2,3,4,5,6]

<ul>
    {
       arr.map((ele,idx)=>
          <li key={ele.toString()}>{ele}</li>
  
           )
    }
</ul>

key可以省略,如果省略的话,React会默认将元素的索引作为列表项的key值

但是!!!一般不推荐将索引值作为列表项的key,因为React使用过key这个唯一标识来区分不同的列表项,哪些是新添加进来的,哪些是已经删除的;

如果将索引作为key值,因为当我们删除数组中的某一个元素时,其他元素对应的索引都有可能改变,因此就不能保证唯一标识列表项了!

另外,元素的 key 只有放在就近的数组上下文中才有意义

也就是说,当把某个元素渲染成组件(里面可能会嵌套多个子组件)时,我们需要将key属性添加到这个组件的最外层组件!!

function ListItem(props) {
  // 正确!这里不需要指定 key:
  return <li>{props.value}</li>;
}

function NumberList(props) {
  const numbers = props.numbers;
  const listItems = numbers.map((number) =>
    // 正确!key 应该在数组的上下文中被指定
    <ListItem key={number.toString()}              value={number} />

  );
  return (
    <ul>
      {listItems}
    </ul>
  );
}

const numbers = [1, 2, 3, 4, 5];
ReactDOM.render(
  <NumberList numbers={numbers} />,
  document.getElementById('root')
);

还有,数组元素中使用的 key 在其兄弟节点之间应该是独一无二的。然而,它们不需要是全局唯一的。当我们生成两个不同的数组时,我们可以使用相同的 key 值:

最后,key 会传递信息给 React ,但不会传递给你的组件。如果你的组件中需要使用 key 属性的值,请用其他属性名显式传递这个值:

const content = posts.map((post) =>
  <Post
    key={post.id}
    id={post.id}
    title={post.title} />
);

上面的Post 组件可以读出 props.id,但是不能读出 props.key

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值