JSX 渲染文章列表

上一章我们已用 Vite 把博客项目跑起来,页面上却还只有一句欢迎语。真实博客首先要做的,就是把"文章列表"铺到页面上:准备一组文章数据,再用 JSX 把它渲染成一行行列表。本章就用博客首页来练习 JSX 的列表渲染。

准备文章数据

文章可以抽象成对象数组,每篇包含 id、标题、摘要、作者等字段。先在 App.jsx 里放一份临时数据:

// src/App.jsx
const posts = [
  { id: 1, title: "React 入门", summary: "认识组件与 JSX", author: "小明" },
  { id: 2, title: "Vite 实践", summary: "极速构建工具", author: "小红" },
  { id: 3, title: "Hooks 上手", summary: "让函数组件有状态", author: "小刚" },
];

用 map 渲染文章列表

JSX 里用花括号 { } 可以插入任意 JS 表达式。数组的 map 方法能把每篇文章"翻译"成一串 JSX,再整体渲染出来:

function App() {
  return (
    <div>
      <h1>我的博客</h1>
      {posts.map((post) => (
        <div key={post.id} className="post">
          <h2>{post.title}</h2>
          <p>{post.summary}</p>
          <span>作者:{post.author}</span>
        </div>
      ))}
    </div>
  );
}
// 页面效果:依次显示三篇文章的标题、摘要与作者

运行 npm run dev,浏览器中就会看到文章列表。注意:JSX 里写 CSS 类名要用 className,而不是 HTML 里的 class。

key 的作用

上面 map 返回的每个列表项都带了 key={post.id}。React 靠 key 区分列表中的每一项:将来增删、排序时,有了 key 才能精准地复用与更新对应节点,避免整列重渲染。key 必须稳定且唯一——优先用数据自带的 id;数组下标虽然能通过检查,但排序后容易张冠李戴,不推荐。

空列表与条件渲染

真实数据是异步请求的,首次渲染时常为空。空数组 map 后什么都不渲染,页面会"白板"。更友好的做法是先判断列表是否为空:

{posts.length === 0 ? (
  <p>暂无文章,请稍后刷新</p>
) : (
  posts.map((post) => (
    <div key={post.id} className="post">
      <h2>{post.title}</h2>
      <p>{post.summary}</p>
    </div>
  ))
)}

三目运算符是 JSX 里做条件渲染最常用的写法,后面的章节还会深入。

小结

列表渲染 = 数组数据 + map 遍历 + key 标记。目前数据还是写死的静态数组,下一章我们把它换成 state(状态),让数据"活"起来,能响应点击等用户操作。

笔记加载中…