Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Router & Query

Router

复习 TanStack Router 时,最核心的直觉应该是:它是以“类型安全”和“异步数据流”为中心的。 它不仅仅是管理 URL,更像是一个状态管理工具。

为了帮你高效梳理,我将最常用的核心概念拆解为以下四个维度:

1. 路由定义 (The Route Tree)

这是所有功能的起点。你需要理解如何构建路由树以及如何处理参数。

2. 核心组件 (Navigation & Outlet)

在页面中进行跳转和渲染时,最常用的是这三个:

3. 数据加载与生命周期 (Data Loading)

这是 TanStack Router 区别于 React Router 的地方,它极大地优化了 Waterfall(瀑布流)问题。

4. 常用 Hooks (Getting State)

开发中你经常需要从当前路由中提取信息:

Hook用途
useParams()获取路径参数,如 { postId: '123' }
useSearch()获取经过校验的搜索参数(Query Params)
useLoaderData()获取 loader 函数返回的数据
useRouter()获取全局路由实例,用于手动触发重载等

💡 开发中的一个小窍门

不要手写路由树。现在官方强烈推荐使用 File-based Routing (基于文件的路由)。 你只需要按照约定的命名方式(如 posts.$postId.tsx)放在 routes/ 目录下,然后运行 tsr watch,它会自动帮你生成复杂的 routeTree.gen.ts 文件。

注意: 永远记得在根组件放一个 <TanStackRouterDevtools />,它能让你直观地看到当前的搜索参数和路由匹配情况,非常高效。

Query

复习 TanStack Query (React Query) 时,最核心的直觉应该是:它是异步状态管理器。它不只是发请求,它是在帮你维护一个高性能、带缓存的“服务端数据快照”。

我们可以从“三驾马车”和“状态流转”这两个维度来拆解:

1. 核心“三驾马车”

这是你 90% 的业务代码里都会写的东西:

2. 关键生命周期与配置

TanStack Query 自动帮你处理了复杂的缓存逻辑,你需要理解数据在什么时候是“新鲜”的:

3. 缓存同步的核心:Invalidation (失效)

当你用 useMutation 修改了数据,怎么让页面上的旧数据变新?

4. 开发利器与进阶常用项

🛠️ TanStack Router + Query 的“梦幻联动”

在复习这两个库时,一定要关注它们的结合点:

  1. 在 Router 的 loader 中预取数据: 利用 queryClient.ensureQueryData。这样用户点击跳转的一瞬间,数据就开始加载了,甚至可能在组件渲染前就进缓存了。

  2. 搜索参数同步: 将 Router 的 useSearch 获取到的分页、筛选参数直接作为 Query 的 queryKey

    效果:用户刷新页面、前进后退,URL 变了,Query 自动感知并拉取正确数据,完全不需要额外的 useEffect