面向初学者的 53 章图解教程

React 19 入门:从零做出一个真实应用

这套教程以 Robin Wieruch 的《The Road to React》(2025 版)为骨架, 跟着原书一路做出同一个应用 —— Hacker Stories:一个可以搜索、删除、排序、分页浏览 Hacker News 文章的小网站。每一章都配了图,并且全部代码按 React 19 的写法来写; 凡是新版本和旧版本思路不同的地方,都会用「旧写法 / 新写法」对照卡片专门讲清楚。

React 19HooksVite JSXForm ActionsuseReducer TypeScriptVitestReact Testing Library React Compiler

React 是什么,一句话版

React 是一个用来构建用户界面的 JavaScript 库。它的核心思想只有一句: 界面是状态的函数 —— 你描述“在某种数据下,界面应该长什么样”, 数据一变,React 负责把页面更新成新的样子。你不再需要自己去找 DOM 节点、改文字、加删元素。

状态 state { searchTerm: 'react' } 组件函数 f(state) => JSX 你只写这一部分 界面 UI 浏览器里看到的页面 用户输入、网络返回 → 更新 state → React 重新调用组件函数 → 页面自动更新 UI = f(state)
图 0-1 React 的心智模型:界面是状态的函数

为什么强调“新版本”

React 从 2013 年发布到现在,写法已经变过好几轮。网上大量教程、博客、Stack Overflow 答案 还停留在旧写法上 —— 初学者最容易踩的坑,就是把不同年代的写法混在一起。下面这张时间线标出了 影响日常写法的几个关键版本:

2013 React 发布 类组件 createClass 2017 · 16 Fiber 架构 Fragment 2019 · 16.8 Hooks 登场 函数组件 成为主流 2020 · 17 新 JSX 转换 不必 import React 2022 · 18 createRoot 并发渲染 自动批处理 2024-12 · 19 Actions / use() ref 作为 prop <Context> 直接当 Provider 文档元数据 2025-10 · 19.2 <Activity> · useEffectEvent React Compiler 1.0 旧教程常见:类组件、this.setState、生命周期方法 本教程:函数组件 + Hooks
图 0-2 React 版本时间线。本教程只使用函数组件和 Hooks,并用上 React 19 的新特性
🧩

函数组件 + Hooks

不再写类组件、不写 this、不写生命周期方法。状态用 useState,副作用用 useEffect。

🚀

createRoot

旧的 ReactDOM.render() 在 React 19 中已被移除,入口统一用 createRoot。

📝

Form Actions

<form action={fn}> 取代“onSubmit + preventDefault”,配合 useActionState 管理提交状态。

⚙️

React Compiler

编译器自动做记忆化,memo、useCallback、useMemo 不再需要到处手写。

贯穿全书的项目:Hacker Stories

和原书一样,我们不做零散的小例子,而是一路打磨同一个应用。它会从一个只显示 “Hello React” 的组件, 长成一个能连接真实 API、带搜索历史和分页加载、有类型、有测试、部署上线的完整应用:

第 3–7 章 静态列表 JSX · map · 组件拆分 第 8–13 章 可搜索 props · state · 状态提升 第 14–18 章 记住搜索 · 删除 useEffect · 自定义 Hook 第 19–24 章 真实 API 数据 reducer · async · Actions 第 26–27 章 好看起来 CSS Modules · SVG 第 28–32 章 可维护 性能 · TS · 测试 · 结构 第 33–35 章 真实功能 排序 · 历史 · 分页 第 36–53 章 进阶 · 选型 · 上线 🎉 路由 · 生态 · Next.js · 部署 My Hacker Stories Search: react Submit React · Redux · Vite … 最终效果示意
图 0-3 Hacker Stories 在各章中逐步成长

这套教程写给谁

ⓘ 需要什么前置知识

会写变量、函数、数组和对象就够了。map / filter、箭头函数、解构、展开运算符、 Promise 和 async/await 这些“现代 JavaScript”,用到的时候都会顺手讲一遍。 命令行只需要会 cd 和敲命令。

怎么用这套教程

旧写法 React ≤ 17
JSX
import ReactDOM from 'react-dom';

ReactDOM.render(<App />, document.getElementById('root'));
新写法 React 18+ / 19
JSX
import { createRoot } from 'react-dom/client';

createRoot(document.getElementById('root')).render(<App />);

全部章节

💡 一句话总结

如果你只记住一件事:React 组件就是一个函数,输入是 props 和 state,输出是界面描述(JSX); 数据只从上往下流,想往上通知就传一个回调函数下去。 剩下的 53 章,都是在展开这句话。

说明:本站是基于《The Road to React》(Robin Wieruch 著,roadtoreact.com) 整理的中文学习笔记,按原书的项目顺序重新组织讲解并补充了图示与 React 19 的新旧对照。想获得完整原文、练习源码和后续更新,请支持原书。