• 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

  • 相关阅读:
    【Tensorflow】使用Tensorflow自定义模型和训练
    10 分钟, 带你彻底掌握 SQL 多表查询
    C++ STL进阶与补充(string容器)
    Vue3学习记录
    快手怎么涨粉最快?10个实用方法让你迅速积累粉丝
    野火霸天虎 STM32F407 学习笔记_3 尝试寄存器映射方式点亮 LED 灯
    OLED透明拼接屏:福州鼓山风景区:徜徉于城市壮丽之
    Unity和微软建立云合作伙伴关系,利用Azure赋能全球的创作者
    对一个以“#”结束的字符串
    DS18B20详解
  • 原文地址:https://blog.csdn.net/qq_44718039/article/details/127415565