CalcGuide · 技术博客主页 / 一页纸学习计划
🟠

路由与数据获取:React Router / TanStack Router / SSR / RSC

分类:前端与客户端 · 路径:docs/topics/routing-and-data-fetching/README.md

#react#router#ssr#rsc#suspense#nextjs

学会 data router、loader / action、流式 SSR、React Server Components 与 hydration

父主题

React 应用开发:从组件到 SSR 与测试

子主题(0)

路由与数据获取:React Router / TanStack Router / SSR / RSC

0. 元信息

1. 学习路线

客户端路由基础 → data router(loader/action/revalidate)→ Suspense 与错误边界
  → SSR / SSG / ISR → RSC 与 Server Actions → 选型:Next.js / Remix / TanStack Start

2. 阶段周数分配

精简子主题不固定周数。按 §3 顺序完成,重点是“路由不再是页面跳转,而是数据契约”。

3. 九阶段表

阶段核心知识实践产出学会标准
1History API、hash vs browser router、嵌套路由多页 demo能解释“为什么 hash 模式 SEO 差”
2React Router v6/v7、<Outlet>、layout route登录 + 商品页写嵌套布局不写错 Outlet
3Loader / action / revalidator、<Form>搜索 + 提交不在 useEffect 里拉数据
4TanStack Router:类型安全、search params 校验同上,类型化路由参数能 TS 推导
5ErrorBoundary、404、401、redirect错误页知道 loader throw 会进 ErrorBoundary
6Code split、lazy + Suspense大页面懒加载解释 chunk 拆包策略
7SSR 基础:renderToString / hydration / mismatchNext.js Pages Router 体验能定位 hydration warning
8App Router:Server Component、Client Component、streaming、partial prerendering完整电商雏形能解释 'use client' 边界
9Server Actions、useActionState / useFormStatus / useOptimistic表单 + 乐观更新能解释 Server Action 与 REST 区别

4. 第一周任务

精简版省略固定日程。优先完成“React Router v6 data router + 嵌套布局 + loader 拉数据 + ErrorBoundary”。

5. 阶段通用验收

精简版省略;要求每个路由都有对应数据契约与失败测试。

6. 最终验收

精简版省略;以 §3 第 9 阶段和 §9.4 案例口述检查为准。

7. 综合项目

精简版省略;成果并入父主题电商 SPA 的“路由 + 数据层 + RSC 重构备选”。

本主题贡献

8. 推荐资料

精简版省略;使用 §9.3 和 §9.6 Source。

9. 学习资料汇聚(v0.3 自包含)

9.1 背景与动机

早期 React 是“组件跑在客户端、路由靠库”。数据获取放在 useEffect,导致瀑布、SEO 差、首屏慢。React Router v6.4 引入 data router,把数据获取推到路由层。Next.js App Router 把这思路推到 RSC——组件本身能选“跑在服务端还是客户端”,数据在服务端拉、HTML 流式返回。Remix 把 Web 标准(loader / action / Form)做对。

今天的选择不再是“用不用框架”,而是“用哪条 SSR / RSC 路径”。理解协议(HTTP 缓存、Suspense、streaming)比记 API 更重要。

9.2 概念地图

flowchart LR
  SPA[客户端 SPA] --> RR[React Router / TanStack Router]
  RR --> Data[loader / action / revalidate]
  Data --> Suspense
  Suspense --> SSG[SSG]
  Suspense --> SSR[SSR]
  Suspense --> ISR[ISR]
  Suspense --> PPR[Partial Prerendering]
  SSR --> RSC[Server Components]
  RSC --> Action[Server Actions]
  Action --> Optimistic[useOptimistic]
  RSC --> Hydration
  RSC --> Streaming

9.3 基础知识讲解

9.3.1 论文 / RFC

9.3.2 书 / 文档

9.3.3 博客

9.3.4 人物

9.3.5 方法

9.4 经典问题与经典案例

#问题为什么重要最简答案或证据
1loader 报错不显示没 ErrorBoundary在路由树加 ErrorBoundary 节点
2loader race切换路由旧请求覆盖新RQ 自动取消;loader 用 request.signal
3hydration mismatch服务端 / 客户端输出不同移除 Date.now() / window / localStorage;或用 <ClientOnly>
4'use client' 放错位置整树变成 client最小化 client 边界;只把交互子树标 client
5Server Action 没刷新数据revalidatePath在 action 调 revalidatePath('/cart')
6route 文件名错框架找不到Next.js App Router:page.tsx / layout.tsx / loading.tsx / error.tsx
7嵌套路由 Outlet 丢失路径不匹配父用 <Outlet/>;子用相对 path
8401 跳转循环路由守卫写错守卫返回 redirect('/login?next=...')
9search params 类型丢useSearchParams 拿到 stringTanStack Router:validateSearch: z.object(...)
10路由懒加载闪屏chunk 没预取<Link prefetch="intent"> 或显式 router.preloadRoute

9.5 学习难点

9.6 技术标准与接口

9.6.1 Entity

名称版本组织状态
React Routerv7Remix Software活跃
TanStack Router1+Tanner Linsley活跃
Next.js15+Vercel活跃
Remix2+Remix Software(已并入 RR v7)活跃 / 合并
Astro4+Astro 团队活跃
W3C Fetch / URL标准WHATWG标准

9.6.2 Scope

9.6.3 Structure

9.6.4 Ecosystem

9.6.5 Depth Tiers

层级可观察能力
L0知道路由 / SSR 存在
L1看得懂路由示例
L2能用 data router、能用 SSG / SSR
L3能排 hydration mismatch、设计 client/server 边界
L4能设计 RSC 架构、写自定义 loader / revalidate

本计划目标:L3

9.6.6 Source

10. 常见误区

11. 所有知识点分类

  1. 编程语言 2. 数据结构与算法 3. 计算机基础 4. 工程技术 5. Web 与后端 6. 前端与客户端 7. 数据与人工智能 8. 项目与职业能力 9. 安全与可靠性

本计划归属:前端与客户端 主 + Web 与后端 辅。


直接依赖(2)

查看知识图谱