用 React 写了个“摸鱼计划表”,比 TODO App 有趣多了!

146 阅读3分钟

传统的 TODO 应用太无聊?来点有生活气息的!这次我们用 React 搞点轻松的东西:写一个能“动态更新”的摸鱼计划表,不仅练手,还能缓解你的编码疲劳。


为什么不是又一个 TODO?

几乎每个学习 React 的人,都会从“写一个 TODO 应用”开始。

但说实话,那种“吃饭、睡觉、写代码”的清单,做起来毫无乐趣。于是我决定换个思路,做个更贴近打工人日常的任务列表,名字就叫:摸鱼计划表

它可以:

  • 显示一组轻松幽默的任务;
  • 模拟“服务器响应”,让数据在几秒后动态更新;
  • 用简单的状态管理(useState)和组件渲染完成页面;
  • 加一点样式,让 UI 不那么枯燥。

是不是比“写一个 TODO App”有意思多了?


开发环境:用 Vite 初始化一个 React 项目

为了让项目跑得快、改得爽,我用 Vite 搭了个 React 脚手架:

npm init vite@latest

选择配置:

  • 项目名:todos
  • 框架选 React
  • JavaScript(初学者友好)

然后安装依赖并运行:

cd my-react-app
npm install
npm run dev

浏览器自动打开 http://localhost:5173,开发环境就起来了。


核心功能:摸鱼计划 = 一张“动态任务清单”

页面效果很简单,一张表格,里面列着我们一天要完成的“高质量摸鱼动作”。

我们需要两个状态:

  • todos:任务列表
  • title:表格标题

useState 处理:

const [todos, setTodos] = useState([
  '假装努力 15 分钟',
  '和猫猫深度对话',
  '进行一次高质量摸鱼',
]);

const [title, setTitle] = useState('今日摸鱼计划');

模拟异步更新:React 的状态响应力体现出来了

现实里,任务经常不是一次性就到位的。我们可以用 setTimeout() 来模拟“服务器发来新任务”的感觉:

setTimeout(() => {
  setTodos([
    '假装努力 15 分钟',
    '和猫猫深度对话',
    '进行一次高质量摸鱼',
    '灵魂出窍练习(进阶)',
  ]);
  setTitle('摸鱼成就解锁中...');
}, 5000);

5 秒后,任务列表自动更新,React 会自动触发重新渲染,完全不需要手动操作 DOM。


表格展示:用 .map() 动态生成任务项

JSX 的语法让我们可以像写 HTML 那样组织结构,又能在里面插入 JS 表达式,渲染任务列表自然不过了:

<table>
  <thead>
    <tr>
      <th>序号</th>
      <th>任务</th>
    </tr>
  </thead>
  <tbody>
    {todos.map((item, index) => (
      <tr key={index}>
        <td>{index + 1}</td>
        <td>{item}</td>
      </tr>
    ))}
  </tbody>
</table>

小提示:React 要求循环渲染时每个元素有唯一 key,这里只是练手,可以用 index


页面样式:用 CSS 文件快速上色

React 没有限制你怎么写样式,最直接的方式就是老老实实写 CSS 文件:

/* App.css */
.title {
  background-color: green;
  color: white;
  padding: 1rem;
}

然后在组件中引用使用:

import './App.css';
<h1 className="title">{title}</h1>

写在最后:React 没你想得那么重

这个“摸鱼计划表”虽然只是个小玩具,但你已经掌握了:

  • 如何用 React 搭建项目;
  • 怎么用 useState 管理数据;
  • 如何响应状态变化并自动刷新页面;
  • JSX 的基本写法;
  • 简单样式的添加方法。

写这个项目的过程是轻松的,也是我学习 React 时觉得最放松的时刻。如果你也觉得 TODO 太千篇一律,不如给它加点幽默、加点人味。


🧪 如果你也做了自己的“计划表”,欢迎发给我看看!我们一起,摸鱼不摸鱼,至少代码写得有趣 🐟