前端小白学 React 框架(五)

142 阅读3分钟

React列表渲染

我正在参加「掘金·启航计划」

随便说点

因为在真实开发中我们会从服务器请求到大量的数据,数据会以列表的形式存储,比如歌曲、歌手、排行榜列表的数据;比如商品、购物车、评论列表的数据;比如好友消息、动态、联系人列表的数据等等。

而在React中并没有像Vue模块语法中的v-for指令,而且需要我们通过JavaScript代码的方式组织数据,转成JSX,很多从Vue转型到React的同学非常不习惯,认为Vue的方式更加的简洁明了,但是React中的JSX正是因为和JavaScript无缝的衔接,让它可以更加的灵活,另外React是真正可以提高我们编写代码能力的一种方式

那么如何展示列表呢?在React中,展示列表最多的方式就是使用数组的map高阶函数,很多时候我们在展示一个数组中的数据之前,需要先对它进行一些处理,比如过滤掉一些内容,那么就可以使用filter函数;比如截取数组中的一部分内容,那么可以使用slice函数。

React列表渲染案例一

实现的效果如下:

截屏2023-05-16 16.38.49.png

那么实现思路就是利用表格展示,而动态数据只有每一行的数据,因此可以先把table的框架搭好,很简单,只要按原来HTML那样写就行了。

class App extends React.Component {
  constructor() {
    super();

    this.state = {
      message: 'React列表渲染案例一',
      students: [
        { id: 1, name: 'a', score: 79 },
        { id: 2, name: 'b', score: 88 },
        { id: 3, name: 'c', score: 94 },
        { id: 4, name: 'd', score: 78 },
        { id: 5, name: 'e', score: 66 },
      ]
    }
  }

  render() {
    const { message, students } = this.state;

    return (
      <div>
        <h2>{message}</h2>
        <table>
          <thead>
            <tr> 
              <th>ID</th>
              <th>Name</th>
              <th>Score</th>
            </tr>
          </thead>
          <tbody>
            
          </tbody>
        </table>
      </div>
    )
  }
}

写完后,页面上的结果是这样的:

截屏2023-05-16 16.40.41.png

那么接下来就是把每一行的数据动态写入,也就是在tbody中添加每一行的trtd标签即可。可以想到用map函数来实现,也就是遍历students数组,然后更改返回值为我们所需要的JSX语法即可。

<tbody>
{
  students.map(item => {
    return (
      <tr>
        <td>{item.id}</td>
        <td>{item.name}</td>
        <td>{item.score}</td>
      </tr>
    )
  })
}
</tbody>

这样子,我们的列表渲染就完成啦 🎉。

React列表渲染案例二

变身成为产品经理 👨🏻‍💻,我们现在改变需求,只想展示分数大于90分的同学,那么很容易想到只要把上述的map前先用filter函数过滤即可。

<tbody>
{
  students.filter(item => item.score > 90).map(item => {
    return (
      <tr>
        <td>{item.id}</td>
        <td>{item.name}</td>
        <td>{item.score}</td>
      </tr>
    )
  })
}
</tbody>

最终实现的效果是这样的:

截屏2023-05-16 16.45.48.png

列表中的key

我们会发现在前面的代码中只要展示列表都会报一个警告:

截屏2023-05-16 16.54.34.png

这个警告是告诉我们需要在列表展示的jsx中添加一个key,key主要的作用是为了提高diff算法时的效率

写在最后

如果大家喜欢的话可以收藏本专栏,之后会慢慢更新,然后大家觉得不错可以点个赞或收藏一下 🌟。

本节的源码放在作者的GitHub仓库里,分别是: