zoukankan      html  css  js  c++  java
  • 9 React 列表 & Keys

    使用 map() 方法遍历数组生成了一个 1 到 5 的数字列表:

    map()方法可以用来创建列表。

    const numbers = [1, 2, 3, 4, 5];
    const listItems = numbers.map((numbers) =>
      <li>{numbers}</li>
    );
     
    ReactDOM.render(
      <ul>{listItems}</ul>,
      document.getElementById('example')
    );

     我们可以将以上实例重构成一个组件,组件接收数组参数,每个列表元素分配一个 key,不然会出现警告 a key should be provided for list items,意思就是需要包含 key

    function NumberList(props) {
      const numbers = props.numbers;
      const listItems = numbers.map((number) =>
        <li key={number.toString()}>
          {number}
        </li>
      );
      return (
        <ul>{listItems}</ul>
      );
    }
     
    const numbers = [1, 2, 3, 4, 5];
    ReactDOM.render(
      <NumberList numbers={numbers} />,
      document.getElementById('example')
    );

    Keys:

    Keys 可以在 DOM 中的某些元素被增加或删除的时候帮助 React 识别哪些元素发生了变化。因此你应当给数组中的每一个元素赋予一个确定的标识。

    const numbers = [1, 2, 3, 4, 5];
    const listItems = numbers.map((number) =>
      <li key={number.toString()}>
        {number}
      </li>
    );

    一个元素的 key 最好是这个元素在列表中拥有的一个独一无二的字符串。通常,我们使用来自数据的 id 作为元素的 key:
    const todoItems = todos.map((todo) =>
      <li key={todo.id}>
        {todo.text}
      </li>
    );

    当元素没有确定的 id 时,你可以使用他的序列号索引 index 作为 key:
    const todoItems = todos.map((todo, index) =>
      // 只有在没有确定的 id 时使用
      <li key={index}>
        {todo.text}
      </li>
    );

    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('example')
    );
    
    
    
  • 相关阅读:
    一个请求在Struts2框架中的处理流程
    最大公约数和最小公倍数--java实现
    项目技术总结
    项目学习经验
    MyEclipse Project Migration功能中文简单介绍
    RSA的傻瓜原理
    Class.forName()的作用
    matplotlib 画封闭图像并填充
    matplotlib 做图通过弹出窗口展示 spyder
    pyodbc 一些内容
  • 原文地址:https://www.cnblogs.com/liufei1983/p/14506823.html
Copyright © 2011-2022 走看看