状态管理
React 组件内 state 用 Hooks;跨组件共享状态可选 Context、Redux Toolkit、Zustand 等。见 Context Hook。
选型简表
| 场景 | 建议 |
|---|---|
| 父子/兄弟局部共享 | 提升 state + props |
| 主题、语言、当前用户(低频) | Context |
| 服务端列表/详情、缓存、重试 | TanStack Query |
| 复杂客户端全局状态、可预测更新 | Redux Toolkit |
| 中小型全局状态、API 简单 | Zustand |
勿把所有数据放入全局 store;服务端状态与客户端 UI 状态分离是常见架构原则(见 Redux 官方 服务端状态 vs 客户端状态 说明)。
Redux Toolkit(RTK)
官方推荐的 Redux 写法,内置 Immer、异步 createAsyncThunk、DevTools。
import { configureStore, createSlice } from "@reduxjs/toolkit";
const counterSlice = createSlice({
name: "counter",
initialState: { value: 0 },
reducers: {
increment(state) {
state.value += 1;
},
},
});
export const store = configureStore({
reducer: { counter: counterSlice.reducer },
});
组件侧使用 react-redux 的 useSelector、useDispatch。
Zustand
极简 store,无 Provider 包裹(除非需要 SSR 等):
import { create } from "zustand";
type BearStore = {
bears: number;
increase: () => void;
};
export const useBearStore = create<BearStore>((set) => ({
bears: 0,
increase: () => set((s) => ({ bears: s.bears + 1 })),
}));
const bears = useBearStore((s) => s.bears);
TanStack Query(服务端状态)
管理 fetch 的 loading、error、缓存、失效与重新请求:
const { data, isPending, error } = useQuery({
queryKey: ["user", userId],
queryFn: () => fetchUser(userId),
});
与 Redux 互补:Query 管远程数据,Redux/Zustand 管纯客户端状态。
参考文献
以下链接在编写时均可正常访问:
| 资料 | 说明 |
|---|---|
| Redux Toolkit 文档 | RTK(英文) |
| React Redux | 绑定 React |
| Zustand 文档 | 英文 |
| TanStack Query 文档 | React 集成 |
相关文章
State 与 Reducer
Hooks 让函数组件拥有 state 与副作用能力。本文介绍 useState 与 useReducer。见 React 基础。
渲染与协调
React 将组件渲染为虚拟 DOM 树,再协调(reconciliation)到浏览器 DOM。理解该过程有助于解释 key、memo 与性能优化。涵盖渲染流程、Fiber、startTransition、Suspense、最佳实践与常见坑。
工程化
新建 React 项目时,官方与社区主流工具为 Vite;全栈场景常用 Next.js。涵盖 Vite + React、Create React App 现状、Next.js、目录结构、环境变量、部署、最佳实践与常见坑。
TypeScript
React 官方推荐 TypeScript。类型主要落在 Props、事件、Ref 与 Hooks 返回值上。见 组件。
测试
React 组件测试推荐 React Testing Library(RTL):从用户可见行为断言,而非实现细节。运行器常用 Vitest 或 Jest。涵盖安装配置、查询优先级、异步测试、Mock 网络请求、最佳实践与常见坑。
构建与分包
通过代码分割与构建配置减小首屏 JavaScript 体积。涵盖 React.lazy/Suspense、路由级分割、Tree Shaking、Vite 生产构建、体积分析、最佳实践与常见坑。运行时优化见 runtime。
Series
react
14 / 16