你的浏览器不支持canvas

Enjoy life!

React - 列表渲染

Date: Author: JM

本文章采用 知识共享署名-非商业性使用-禁止演绎 4.0 国际许可协议 进行许可。

一、列表渲染

1.1 文件目录

relationship-map

1.2 新增组件List

  • List/index.jsx 代码如下:
import React, {Component} from 'react';

import Item from '../Item';

import fruits from '../fruits'; // 引入的数据来源

import './style.css';

class List extends Component {
  render () {
    return (
      <ul className="list">
        {
          fruits.map((item, index) => {
            return (
              <li key={index}>{item}</li>
            )
          })
        }
      </ul>
    )
  }
}

export default List;
  • src/index.jsx 代码如下
import React, {Component} from 'react';

import ReactDom from "react-dom";

import './style.css';

import Input from './Input';
import List from './List';  // 新引入的组件List


class App extends Component {
    render () {
        // 如何访问变量 -- 利用字符串模板
        // const hello = 'hello';
        // <h1>{hello}</h1>
        return (
            // 只能有一个容器,其他内容都放在这个容器里面
            <div className="app">
                <h1>Find my fruit</h1>
                <Input/>
                <List/>  // 新添加的组件List
            </div>
        );
    }
}

ReactDom.render(
    <App/>,
    document.getElementById('root')
);
  • 效果图如下

relationship-map

1.3 key属性(重点)

fruits.map((item, index) => {
    return (
      <li key={index}>{item}</li> // 这里使用了key属性
    )
})
  • 如果将key属性去掉,浏览器会报错,如下所示:

relationship-map

  • key属性:是一个可选的唯一标识符。
  • 通过给组件设置唯一的key,确保渲染周期内保持一致,使React能够更智能的决定应该重用一个组件,还是销毁并重新创建一个组件,从而提升渲染的性能。
  • 例:当两个已经存在DOM中的组件交换位置时,可以不用重新渲染DOM而是移动。
  • 我们也可以这样理解:
    • render()函数其实需要反复触发调用。
    • 由于key键的存在,当每次触发render的时候, React就会智能地利用key值高性能重用已存在的DOM,而不是随意地去创建新DOM
    • 因此,如果没有key值,就会去重新创建DOM,大大降低了性能

tips务必给你循环的数组的每一项都添加key值,尤其涉及到DOM的时候


对于本文内容有问题或建议的小伙伴,欢迎在文章底部留言交流讨论。