CodeRoadMap
首页路线题库资源库文章社区
CodeRoadMap

程序员的学习成长路线图。内容免费开放,登录后可同步路线图与课时进度。

由 程序员柏风 独立维护 · 关于作者

学习

  • 路线图
  • 课程
  • 面试题
  • 文章
  • 我

更多

  • 资源
  • 社区
  • 关于作者
  • 内容说明

© 2026 CodeRoadMap

津ICP备2026012044号-1·津公网安备12011002026155号·coderoadmap@126.com
React 生态进阶/课时/服务端状态与 TanStack Query
RawBlame
课时目录12 节

React 生态进阶

  1. 01React 生态地图
  2. 02客户端状态管理
  3. 03服务端状态与 TanStack Query
  4. 04Axios 与数据获取
  5. 05GraphQL 客户端
  6. 06UI 组件库
  7. 07动画与 Framer Motion
  8. 08E2E 测试
  9. 09React Native 概览
  10. 10表单与校验
  11. 11生态层性能
  12. 12综合练习

服务端状态与 TanStack Query

TanStack Query、RTK Query。

35 分钟

服务端状态与 TanStack Query

useEffect + fetch 能拉数据,却难处理 缓存、重复请求、后台刷新、乐观更新。TanStack Query(原 React Query)把 服务端状态 当一等公民;Redux 生态里 RTK Query 走类似思路。

学习目标

  • 区分客户端状态与服务端状态
  • 掌握 Query 的核心概念:queryKey、staleTime、invalidate
  • 知道 RTK Query 与 TanStack Query 的选型场景

为何不用 useEffect 包一切

问题手写 fetchTanStack Query
同 key 重复请求易重复自动 dedupe
切页回来再 loading缓存 + 可选 refetch
错误/加载态每个组件写统一 isLoading / isError
列表增删改手动改 stateinvalidateQueries

react-data 的 fetch 入门仍有效;Query 是 规模化 时的升级。

TanStack Query 基础

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

function TrackList() {
  const { data, isLoading, error } = useQuery({
    queryKey: ["tracks"],
    queryFn: () => fetch("/api/tracks").then((r) => r.json()),
    staleTime: 60_000,
  });

  if (isLoading) return <p>加载中…</p>;
  if (error) return <p>加载失败</p>;
  return <ul>{data.map((t) => <li key={t.slug}>{t.title}</li>)}</ul>;
}

queryKey 决定缓存身份:改 slug 就改 key。mutation 成功后:

queryClient.invalidateQueries({ queryKey: ["tracks"] });

staleTime 与 gcTime

  • staleTime:多久内视为「新鲜」、不自动 refetch
  • gcTime(原 cacheTime):无订阅者后缓存保留多久

课时列表可 staleTime 较长;用户权限宜短或窗口 focus 时 refetch。

RTK Query 简览

已用 Redux 管复杂客户端状态时,RTK Query 把 API slice 与缓存写进 store:

  • createApi + endpoints 定义 REST
  • 自动生成 hooks:useGetTracksQuery
场景倾向
无 Redux、Next.js + ReactTanStack Query
已有 Redux 大型后台RTK Query
GraphQLApollo Client(下节 GraphQL 课)

与 Next.js RSC

Server Component 可直接 fetch 带 cache;客户端交互区(收藏、实时筛选)再用 Query。分工见 nextjs-essentials 的 Server/Client 边界。

练习

  • 为 /api/tracks 写 useQuery,staleTime 设 30s,观察切 tab 行为
  • 实现一个 mutation 后 invalidate 列表
  • 对比 RTK Query 文档首页,写三条与 TanStack Query 的异同

小结

服务端状态 = 缓存 + 失效策略,不是另一个 useState。 下一课 Axios 与 REST 客户端细节。

加载本节练习…
← 上一课客户端状态管理下一课 →Axios 与数据获取