react-fetching-library的useQuery深度剖析:loading、error、刷新与中止,React请求四态一次搞定
react-fetching-library的useQuery深度剖析loading、error、刷新与中止React请求四态一次搞定【免费下载链接】react-fetching-librarySimple and powerful API client for react Use hooks or FACCs to fetch data in easy way. No dependencies! Just react under the hood.项目地址: https://gitcode.com/gh_mirrors/re/react-fetching-libraryreact-fetching-library 是一个零依赖、只基于 Fetch API 的 React 数据请求库而 useQuery.ts 中的useQuery是它最核心的数据获取钩子一次调用即可拿到loading、error、payload并内置了query()刷新与abort()中止能力。本文不堆砌代码带你从状态流转的视角读懂这四态是如何被一个 reducer 统一驱动的。useQuery 入门一行 hook 拿到完整请求状态useQuery的签名非常克制——useQuery.ts第一个参数action描述一次请求methodendpoint还可选headers、body等类型定义见 client.types.ts第二个参数initFetch是否挂载时立即请求默认true传false就变成按需请求等调用query()才发请求。返回对象是响应 控制的合并体类型UseQueryResponse见 client.types.ts字段含义来自哪里loading是否正在请求内部状态机error/errorObject是否出错 / 错误详情响应对象payload/status/headers成功数据 / 状态码 / 响应头响应对象query刷新绕过缓存重新请求控制函数abort中止当前进行中的请求控制函数reset清空状态回到初始态控制函数典型用法就是解构出需要的部分传给展示组件——use-query-hook 示例里的容器组件正是这么做的。loading由 responseReducer 驱动的状态机loading不是散落的useState而是由 responseReducer.ts 统一管理的共四种指令指令行为触发时机SET_LOADINGloading: true每次发起请求前SET_RESPONSE写入响应loading: false请求拿到结果RESET_LOADING仅把loading置回false请求被中止时RESET整体回到初始态调用reset()初始值也很讲究useQuery.ts 中若缓存里有该请求的历史响应则loading直接为false有数据就不转圈否则取决于initFetch。测试用例 useQuery.test.tsx 验证了这一点挂载即loading: true请求完成后loading: false且payload就位。error抛出 QueryError 与普通错误的两条路径库对错误做了分级这一点源码里写得很直白普通错误网络失败、5xx 等client 层会把异常捕获成{ error: true, errorObject }返回见 client.tsuseQuery正常更新状态你在渲染里判断error展示提示即可组件不会崩。QueryError主动抛出当 action 配置了config.emitErrorForStatuses命中指定状态码时 client 会构造 QueryError 并抛出。此时useQuery会在 useQuery.ts 直接throw交由 React 错误边界接管——项目自带 QueryErrorBoundary.tsx 组件可以优雅地渲染整页级错误 UI。一句话记忆小错就地处理大错抛给边界。刷新query() 如何绕过缓存强制重新请求返回的query就是 handleReload它等价于handleQuery(true)——多传了一个skipCache true。区别在于首次挂载走的请求会先查 client 上配置的缓存通过 useCachedResponse.ts 命中即返回而query()会跳过缓存直连网络拿到的一定是最新数据。它还返回PromiseQueryResponseT所以你可以await state.query()后再触发后续逻辑比如提交表单后刷新列表。想彻底清掉数据而不是重取用reset()它会派发RESET指令把loading和payload一并归零。中止abort() 与 AbortController 的自动清理这是useQuery最容易被低估的能力实现在 handleQuery / handleAbort每次发请求前创建新的AbortController并abort 掉上一次未完成的请求——连续快速切换参数时旧请求被掐灭天然规避了竞态条件signal一路透传给 fetch你在 UI 上随时可以调用abort()手动取消组件卸载时effect 的 cleanup 会自动handleAbort()杜绝对已卸载组件 setState的告警若收到的响应是AbortErrorhook 会派发RESET_LOADING把loading拉回false不会卡在 loading 圈上。对应测试 useQuery.test.tsx 专门验证了卸载后不再更新状态这一行为。细节加分项缓存命中与参数化请求缓存 key请求参数会被 base64 编码成 cacheKeyuseQuery.ts。key 变化且缓存有值时会先把缓存响应灌进状态再发新请求避免白屏闪烁。FACC 写法不想手动调 hookQuery.ts 组件用函数式子组件render props把同样的状态递给你两种风格随你选。更复杂的场景参数动态变化可用 useParameterizedQuery写操作用 useMutation它们共享同一套 reducer 心智模型。源码导航模块路径钩子实现src/hooks/useQuery/useQuery.ts状态 reducersrc/reducers/responseReducer.ts请求/响应类型src/client/client.types.tsClient 核心src/client/client.tsQueryErrorsrc/client/errors/QueryError.ts错误边界组件src/components/queryErrorBoundary/QueryErrorBoundary.tsx使用示例examples/use-query-hook/测试用例tests/src/hooks/useQuery/useQuery.test.tsx掌握了reducer 管状态、query 管刷新、abort 管中止、边界管大错这四条主线useQuery的其余细节基本都能顺藤摸瓜读懂。零依赖的轻量库却把 React 请求的四态收敛得相当干净——这正是它值得放进你工具包的理由。【免费下载链接】react-fetching-librarySimple and powerful API client for react Use hooks or FACCs to fetch data in easy way. No dependencies! Just react under the hood.项目地址: https://gitcode.com/gh_mirrors/re/react-fetching-library创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Qt实现Modbus-RTU串口通信:从协议解析到稳定读取的完整实践

Qt实现Modbus-RTU串口通信:从协议解析到稳定读取的完整实践

1. 项目概述:为什么要在Qt中搞Modbus串口读操作?搞工控或者嵌入式设备对接的朋友,对Modbus协议肯定不陌生。它简单、开放,在PLC、传感器、仪表这些设备里几乎是标配。而串口(RS232/RS485)又是Modbus-RTU模式…

2026/8/25 9:41:31 阅读更多 →
如何将 cookiecutter-spacy-fastapi 集成到 Azure Search:自定义认知技能实战教程

如何将 cookiecutter-spacy-fastapi 集成到 Azure Search:自定义认知技能实战教程

如何将 cookiecutter-spacy-fastapi 集成到 Azure Search:自定义认知技能实战教程 【免费下载链接】cookiecutter-spacy-fastapi Cookiecutter API for creating Custom Skills for Azure Search using Python and Docker 项目地址: https://gitcode.com/gh_mirro…

2026/8/25 9:40:24 阅读更多 →
webauthndemo生产化之路:WebAuthn Relying Party安全避坑清单与最佳实践

webauthndemo生产化之路:WebAuthn Relying Party安全避坑清单与最佳实践

webauthndemo生产化之路:WebAuthn Relying Party安全避坑清单与最佳实践 【免费下载链接】webauthndemo An example Node.js Relying Party implementation of the WebAuthn specification 项目地址: https://gitcode.com/gh_mirrors/we/webauthndemo webaut…

2026/8/25 9:40:24 阅读更多 →

最新新闻

基于QClaw与AI大模型构建微信智能聊天机器人:从自动化流程到场景化应用

基于QClaw与AI大模型构建微信智能聊天机器人:从自动化流程到场景化应用

1. 项目缘起:从“技术玩具”到“实用工具”的蜕变那天晚上,我正对着电脑屏幕发呆,手里摆弄着QClaw这个新上手的工具。说实话,一开始我只是把它当成一个“技术玩具”——一个能让我把各种API和逻辑串起来、实现一些自动化小功能的平…

2026/8/25 10:24:01 阅读更多 →
Qt drawRoundRect函数深度解析:从参数原理到高DPI适配与性能优化

Qt drawRoundRect函数深度解析:从参数原理到高DPI适配与性能优化

1. 项目概述:为什么圆角矩形值得深究在界面开发领域,圆角矩形几乎无处不在。从手机App的卡片、按钮,到桌面软件的窗口、面板,圆润的边角早已成为现代UI设计的标配。它不仅仅是视觉上的美化,更承载着引导用户视线、区分…

2026/8/25 10:24:01 阅读更多 →
GitLab代码行数统计:从界面查询到API脚本的完整实践指南

GitLab代码行数统计:从界面查询到API脚本的完整实践指南

1. 从“数行数”到洞察项目:一个被低估的GitLab实用场景在团队协作开发中,我们常常会面临一些看似简单,实则能反映项目深层状态的问题。比如,当项目经理问起“这个迭代我们团队贡献了多少代码量?”,或者当你…

2026/8/25 10:24:01 阅读更多 →
程序员如何用AI快速生成技术架构图?LLM+Mermaid实战指南

程序员如何用AI快速生成技术架构图?LLM+Mermaid实战指南

1. 项目概述:为什么程序员需要掌握AI画技术图? 最近和几个技术团队的朋友聊天,发现一个挺有意思的现象:大家讨论架构设计或者排查复杂问题时,越来越多的人开始习惯性地打开某个AI绘图工具,敲几行描述&…

2026/8/25 10:24:01 阅读更多 →
从Claude到开源模型:OpenClaw与Hermes框架的模型替换实战指南

从Claude到开源模型:OpenClaw与Hermes框架的模型替换实战指南

1. 从Claude订阅到开源替代:为什么我们需要“Plan B”?最近在折腾AI应用开发的朋友,估计没少为Claude的订阅方案头疼。一方面是API调用成本,另一方面是某些区域的服务可用性问题,都让直接依赖Claude API变得不那么“稳…

2026/8/25 10:24:01 阅读更多 →
不点击鼠标也能通过MouseEvent实现点击事件

不点击鼠标也能通过MouseEvent实现点击事件

文章目录事件系统的本质:发布-订阅模式为什么可以“伪造”点击事件?1. 统一的事件处理接口2. Event 对象的标准化3. 事件流的确定性深入 MouseEvent 的实现细节构造函数参数解析与 element.click() 的差异对比真实模拟完整点击序列在一个普通的网页上&am…

2026/8/25 10:22:56 阅读更多 →

日新闻

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

洛谷 P7912:[CSP-J 2021 T4] 小熊的果篮 ← 双向链表

【题目来源】 https://www.luogu.com.cn/problem/P7912 【题目描述】 小熊的水果店里摆放着一排 n 个水果。每个水果只可能是苹果或桔子,从左到右依次用正整数 1,2,…,n 编号。连续排在一起的同一种水果称为一个“块”。小熊要把这一排水果挑到若干个果篮里&#x…

2026/8/25 0:00:34 阅读更多 →
Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG

Transformers.js 网页端图像抠图实战:零后端 3 行代码返回透明 PNG 【免费下载链接】transformers.js State-of-the-art Machine Learning for the web. Run 🤗 Transformers directly in your browser, with no need for a server! 项目地址: https:/…

2026/8/25 0:00:34 阅读更多 →
数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

数学建模竞赛论文写作指南:从模型构建到学术表达的核心技能

1. 项目概述:从“会做”到“会写”的竞赛核心跃迁“全国大学生数学建模竞赛”,这个名字对理工科学生来说,分量极重。每年,无数团队在三天三夜的时间里,为一个开放性问题绞尽脑汁,从建立模型、求解算法到编程…

2026/8/25 0:00:34 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/24 20:22:44 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/23 12:10:44 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/24 11:20:22 阅读更多 →