React的列表组件必须要有key?

一、列表组件没有key属性会warning?
1、key提高性能

当创建列表组件时,必须给每一个元素设置 key 属性,否则会有警告: a key should be provided for list items。如果元素没有key属性,React很难判断元素应该怎么渲染?如果元素有key值,那么React只对匹配key值的元素,进行更改等渲染操作,这样极高提升了运行性能。


二、列表组件使用说明
1、错误用法
function ListItem(props) {
    const value = props.value;
    return (
        // 错误!你不需要在这里指定 key:
        
  • {value}
  • ); } function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) => // 错误!元素的 key 应该在这里指定: ); return (
      {listItems}
    ); } const numbers = [1, 2, 3, 4, 5]; ReactDOM.render( , document.getElementById('root') );

    2、正确用法
    function ListItem(props) {
        // 正确!这里不需要指定 key:
        return 
  • {props.value}
  • ; } function NumberList(props) { const numbers = props.numbers; const listItems = numbers.map((number) => // 正确!key 应该在数组的上下文中被指定 ); return (
      {listItems}
    ); } const numbers = [1, 2, 3, 4, 5]; ReactDOM.render( , document.getElementById('root') );

    3、key值无法读取

    key 值会传递给 React ,但不会传递给组件。如果需要使用 key 值,请用其他属性(譬如id):

    # Post 组件可以读出 props.id,但是不能读出 props.key
    const content = posts.map((post) =>
        
    );

    4、唯一性

    key 在兄弟节点间必须唯一,但全局不需要唯一。

    function Blog(props) {
        const sidebar = (
            
      {props.posts.map((post) =>
    • {post.title}
    • )}
    ); const content = props.posts.map((post) =>

    {post.title}

    {post.content}

    ); return (
    {sidebar}
    {content}
    ); } 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( , document.getElementById('root') );

    参考文档

    你可能感兴趣的:(react.js)