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


    使用 JS 中的 map() 方法来遍历数组,可以把数组中的每个元素都映射成 

  •  标签或者其他组件

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

    1. ///let arr=[1,2,3,4,5,6]
    2. <ul>
    3. {
    4. arr.map((ele,idx)=>
    5. <li key={ele.toString()}>{ele}</li>
    6. )
    7. }
    8. </ul>

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

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

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

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

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

    1. function ListItem(props) {
    2. // 正确!这里不需要指定 key
    3. return <li>{props.value}</li>;
    4. }
    5. function NumberList(props) {
    6. const numbers = props.numbers;
    7. const listItems = numbers.map((number) =>
    8. // 正确!key 应该在数组的上下文中被指定
    9. <ListItem key={number.toString()} value={number} />
    10. );
    11. return (
    12. <ul>
    13. {listItems}
    14. </ul>
    15. );
    16. }
    17. const numbers = [1, 2, 3, 4, 5];
    18. ReactDOM.render(
    19. <NumberList numbers={numbers} />,
    20. document.getElementById('root')
    21. );

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

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

    1. const content = posts.map((post) =>
    2. <Post
    3. key={post.id}
    4. id={post.id}
    5. title={post.title} />
    6. );

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

  • 相关阅读:
    2021-2022 ICPC, NERC, Northern Eurasia Onsite L. Labyrinth
    easyExcel合并单元格导出
    Bootstrap Blazor 使用模板创建项目
    Java架构师软件架构风格
    基于opencv+tensorflow+神经网络的智能银行卡卡号识别系统——深度学习算法应用(含python、模型源码)+数据集(一)
    24 mysql all 查询
    pandas教程:Pivot Tables and Cross-Tabulation 数据透视表和交叉表
    Vue3(笔记)
    虾皮shopee根据ID取商品详情 API 返回值说明
    Seata框架详解
  • 原文地址:https://blog.csdn.net/qq_44718039/article/details/127415565