新闻详情

新闻详情

首页 / 资讯中心 / 详情

React 数据请求:TanStack Query

发布时间:2026/9/30 2:47:39来源:尧图网络
React 数据请求:TanStack Query
React 数据请求TanStack Query前置React 路由React Router目标用 Query 管理 loading / error / 缓存而不是手写一堆useEffect useState。引言组件里的useState管 UI 状态服务器上的列表 / 详情是另一类东西要请求、等 loading、处理失败、缓存、再刷新。手写useEffect fetch 三个 useState容易漏重试、漏竞态。TanStack Querytanstack/react-query专门管这类「服务端状态」。本篇 demo本地 mock 待办 600ms 延迟演示 loading / 列表 / 手动刷新离线也能跑。动手完整代码react2/07-data-fetching/democdreact2/07-data-fetching/demonpminstallnpmrun dev打开后先看到「加载中…」再出列表点「重新请求」会再走一遍 delay。1. 为什么不用纯useEffect手写常见形态const [data, setData] useState(null) const [loading, setLoading] useState(true) const [error, setError] useState(null) useEffect(() { fetch(/api/todos) .then((r) r.json()) .then(setData) .catch(setError) .finally(() setLoading(false)) }, [])缺什么取消过期请求、窗口切回自动刷新、同 key 去重、失败重试、缓存共享……Query 把这些默认带上。2. 先挂QueryClientProviderimport { QueryClient, QueryClientProvider, useQuery } from tanstack/react-query const client new QueryClient() export default function App() { return ( QueryClientProvider client{client} TodoList / /QueryClientProvider ) }useQuery必须在 Provider 里面用。一般在应用根App或main包一层即可。3.useQuery声明「要这份数据」async function fetchTodos(): PromiseTodo[] { await new Promise((r) setTimeout(r, 600)) // 假装网络 return MOCK_TODOS } function TodoList() { const { data, isPending, isError, error, refetch, isFetching } useQuery({ queryKey: [todos], queryFn: fetchTodos, }) if (isPending) return p加载中…/p if (isError) return p classNameerr失败{(error as Error).message}/p return ( section button typebutton onClick{() refetch()} disabled{isFetching} {isFetching ? 刷新中… : 重新请求} /button ul {data.map((t) ( li key{t.id} span className{t.completed ? done : }{t.title}/span /li ))} /ul /section ) }字段含义queryKey这份数据的缓存身份证相同 key 共享缓存queryFn真正去拉数据的异步函数isPending还没有成功数据首屏 loadingisError/error失败data成功后的结果过了 pending/error 分支后可放心用refetch手动再请求一次isFetching正在请求中含后台刷新已有数据时也可能为 trueisPendingvsisFetching首屏用isPending挡整页点刷新时已有列表用isFetching只禁用按钮 / 显示「刷新中」别把整页清空。4.queryKey怎么设计queryKey: [todos] // 整份列表 queryKey: [todo, id] // 某一条id 变就另缓存 queryKey: [todos, { q }] // 带筛选条件规则直觉key 变了 → 当作另一份查询同一 key → 尽量复用缓存少打重复请求5. 接到真实 API把queryFn换成fetch即可其它 UI 分支不用动async function fetchTodos(): PromiseTodo[] { const res await fetch(/api/todos) if (!res.ok) throw new Error(HTTP ${res.status}) return res.json() }建议在queryFn里对非 2xx抛错这样会走isError而不是把错误 HTML 当成data。对照表概念干什么demoQueryClient缓存与调度中心模块顶层new QueryClient()QueryClientProvider注入 client包住TodoListqueryKey缓存键[todos]queryFn拉数fetchTodosmock delayisPending/isError首屏状态加载中 / 失败文案refetchisFetching手动刷新「重新请求」按钮常见坑做法问题忘了 ProvideruseQuery直接报错queryKey写成每次新对象却又不稳定缓存命中乱、反复请求只用isFetching做首屏已有缓存时可能闪一下空态语义和isPending不同queryFn失败却return null不 throw不会进isError和useState里再存一份data双数据源以 Query 的data为准demo 在练什么Provider useQuery拉 mock 列表isPending/isError分支refetch手动刷新用isFetching反馈按钮状态自己改一改让fetchTodos随机throw new Error(网络炸了)看错误分支或把 key 改成[todos, query]练筛选。运行截图下一篇React 大型项目目录骨架
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

Winform DataGridView显示图片:CellFormatting事件与路径转图完整方案 2026/9/30 10:18:18

Winform DataGridView显示图片:CellFormatting事件与路径转图完整方案

简介:面向 Windows Forms(Winform)开发者的精简技术文档,解决在 DataGridView 表格中按单元格展示图片的常见需求。文档以 C# 示例代码贯穿,重点讲解添加 DataGridViewImageColumn 图片列、利用 CellFormatting 事件按…

阅读更多 →
沙迪克控制器系统注塑机数据采集网关与解析 第三十六章 2026/9/30 10:18:18

沙迪克控制器系统注塑机数据采集网关与解析 第三十六章

1. 引言在注塑成型行业,沙迪克(Sodick)注塑机凭借其高精度电控系统和稳定的成型性能被广泛使用。随着智能制造和工业物联网的推进,越来越多的工厂希望将沙迪克注塑机的运行数据实时采集上来,用于生产监控、质量追溯、能…

阅读更多 →
el-date-picker样式改不动?深入渲染机制与定制方案 2026/9/30 10:18:18

el-date-picker样式改不动?深入渲染机制与定制方案

1. 为什么 el-date-picker 的样式改不动:先搞懂它的渲染机制 先说个我印象很深的经历。前两年给一个后台管理系统做主题换肤,其他组件都顺利切换了,唯独日期选择器像个钉子户——明明在全局样式里写了 .el-input__inner { border-color: red…

阅读更多 →
JMeter压测实战指南:从脚本设计到全链路性能瓶颈排查 2026/9/30 10:18:18

JMeter压测实战指南:从脚本设计到全链路性能瓶颈排查

1. 项目概述:压测这事到底在解决什么问题做后端开发或者系统运维的朋友,应该都躲不开一个场景:新服务上线前、架构调整后、大促活动前,总有人跑来问你一句“系统能扛住多少并发”。其实这个问题本身问得就不太严谨,但大…

阅读更多 →
水面垃圾检测实战:YOLOv11从数据标注到ONNX部署全流程解析 2026/9/30 10:18:17

水面垃圾检测实战:YOLOv11从数据标注到ONNX部署全流程解析

简介:面向具备一定Python基础的研究人员与环保监测技术人员,这份资料完整呈现基于YOLOv11的水面垃圾检测系统从环境配置、数据集准备到模型训练、ONNX导出、性能评估与GUI界面搭建的全流程方案。文档以单份docx形式提供,压缩包整体41KB&#…

阅读更多 →
AI老照片修复实测:从9.9元第一单到稳定接单的三个月 2026/9/30 10:17:48

AI老照片修复实测:从9.9元第一单到稳定接单的三个月

这是一份关于「AI 老照片修复」这门副业的三个月记录。没有神话,也不劝退。第一单 9.9 元,第一个月做了 47 单、收入 2,800 元,第二个月 120 多单、接近一万,第三个月在一万五到两万之间浮动。数字是真的,但数字背后的…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉