FORMA

生态

React 本身专注 UI 层;路由、状态、数据请求、样式等由社区库补充。见 状态管理工程化

核心概念

React 的哲学是**「小核心 + 自由生态」:官方只提供组件模型、Hooks、并发渲染这套核心机制,路由、全局状态、表单、数据请求全部交给社区。好处是团队可以按需组合最合适的工具,代价是新项目需要做大量选型决策**,不同项目之间技术栈差异可能很大。

常用库(2024+ 主流)

领域说明
路由React RouterSPA 客户端路由
服务端状态TanStack Query请求缓存、重试、失效
客户端全局状态Redux ToolkitZustand见 state 章节
表单React Hook Form非受控为主、性能好
样式CSS Modules、Tailwind、CSS-in-JS 各库按团队规范选型
动画Motion(原 Framer Motion)声明式动画
表格/虚拟列表TanStack Table / Virtual无头 UI + 虚拟化
元框架Next.jsReact Router v7(Framework Mode)SSR、路由、数据加载;Remix 已并入 React Router v7,不再是独立框架
表单校验Zod常与 React Hook Form 搭配做 schema 校验
国际化react-i18next社区事实标准

示例:TanStack Query 处理服务端状态

tsx
import { useQuery } from "@tanstack/react-query";

function UserProfile({ userId }: { userId: string }) {
  const { data, isPending, error } = useQuery({
    queryKey: ["user", userId],
    queryFn: () => fetch(`/api/users/${userId}`).then((r) => r.json()),
  });

  if (isPending) return <p>加载中…</p>;
  if (error) return <p>加载失败</p>;
  return <p>{data.name}</p>;
}

TanStack Query 自动处理缓存、重试、后台重新验证、竞态请求取消等,比手写 useEffect + useState 更省心,也避免了Effect 一节中提到的「服务端数据缓存不适合手写 Effect」问题。

UI 组件库

Ant Design、MUI、Radix + shadcn/ui 等;选型看设计语言、可访问性、包体积与 Tree Shaking 支持。

特点
Ant Design企业中后台常用,组件齐全、设计语言统一
MUIMaterial Design 风格,生态成熟
Radix UI + shadcn/ui无样式行为组件 + 可复制粘贴的样式方案,定制自由度高
Chakra UI主题化友好,API 简洁

shadcn/ui 与传统组件库不同:它不是 npm 依赖,而是把组件源码生成到你的项目里,方便深度定制但也意味着升级需要手动同步。

开发工具

  • ESLint eslint-plugin-react-hooks:强制 Hooks 规则(依赖数组完整性、条件调用检测等)。
  • React DevTools:组件树与 Profiler。
  • TypeScript:见 typescript
  • Storybook:组件独立开发与可视化文档。

与 Vue 生态对照(简表)

能力ReactVue
官方元框架无(社区 Next 等)Nuxt
官方路由无(React Router)Vue Router
官方状态无(Redux 等)Pinia
组件库风格多为「行为 + 样式分离」(Radix)多为「开箱即用」(Element Plus)
表单校验Zod + RHF 组合VeeValidate + Yup/Zod

选型建议

  • 新的中后台项目:Vite + React Router + TanStack Query + Zustand(若需要全局状态)+ Ant Design/shadcn
  • 需要 SEO、混合渲染、服务端组件:直接上 Next.js(App Router),减少自己拼装路由和数据获取层的成本。
  • 表单密集型系统:React Hook Form + Zod,配合 UI 库的受控组件适配层。
  • 团队对包体积、定制自由度要求高:Radix + shadcn/ui 优于「一次性引入整套设计语言」的组件库。

常见坑

现象常见原因处理
选了多个状态库混用,代码风格割裂团队没有统一约定「什么状态放哪」明确服务端状态用 TanStack Query,客户端全局状态用一种库
Ant Design 按需引入后仍很大全局样式或未做正确的 tree-shaking 配置确认按组件导入方式与打包工具配置
shadcn/ui 组件升级困难组件代码已被复制进项目并可能被修改升级前对比官方最新版本手动合并变更
Hooks 规则报错但看起来没问题条件语句里调用了 Hook,或依赖数组遗漏严格遵循 Hooks 规则,交给 ESLint 插件把关

生态选型速查

需求建议
快速搭建中后台Vite + Ant Design + React Router
SEO/内容站Next.js(App Router)或 Astro
高度定制视觉Radix UI + shadcn/ui + Tailwind
复杂表单校验React Hook Form + Zod
服务端数据密集型应用TanStack Query(缓存/重试/失效)

延伸阅读

参考文献

以下链接在编写时均可正常访问:

资料说明
React 官方:学习资源中文
Awesome React社区清单(英文)
npm trends下载量对比(选型参考)
TanStack Query服务端状态
shadcn/ui组件方案

Series

react

5 / 16