TanStack Query 的维护者 TkDodo 撰写了一系列关于使用和操作该库的博客文章。其中一些文章介绍了通用的最佳实践,但大多数文章都带有主观的视角。
一个高级的 React Query 入门教程,展示了一些超越官方文档的实用技巧。它涵盖了对默认值(staleTime 与 gcTime)的解释,关于保持服务器状态和客户端状态分离的概念,如何处理依赖项和创建自定义 hook,以及说明 enabled 选项为何如此强大。 阅读更多...
学习使用 React Query 执行常见且重要的任务——转换数据——的可能性。从在 queryFn 中转换,到使用 select 选项,本文概述了所有不同方法的优缺点。 阅读更多...
让我们来看看在使用 React Query 时,当你的组件渲染过于频繁时你可以做什么。该库已经相当优化,但仍有一些可选功能(如 tracked queries),你可以使用它们来避免 isFetching 状态。我们还将探讨 structural sharing 指的是什么。 阅读更多...
我们通常先检查 isPending,然后再检查 isError,但有时,首先检查 data 是否可用应该是第一步。本文展示了错误的检查顺序如何对用户体验产生负面影响。 阅读更多...
文档已经很好地涵盖了测试 React Query 入门所需的内容。本文展示了一些额外的技巧(如关闭 retries 或静默 console),当你测试自定义 hook 或使用它们的组件时,你可能想遵循这些技巧。它还链接到一个 示例仓库,其中包含成功和错误状态的测试,由 mock-service-worker 提供支持。 阅读更多...
由于 React Query 是用 TypeScript 编写的,因此它对 TypeScript 有很好的支持。这篇博文解释了各种泛型,你如何利用类型推断来避免显式地输入 useQuery 及其朋友,如何处理 unknown 错误,类型收窄如何工作等等! 阅读更多...
一个关于如何使用 React Query 实现实时通知的分步指南,可以通过基于事件的订阅或直接将完整数据推送到客户端来实现。适用于从浏览器原生 WebSocket API 到 Firebase 甚至 GraphQL 订阅的任何内容。 阅读更多...
大多数示例仅使用简单的字符串或数组查询键,但随着应用程序的扩展,您如何有效地组织键?本文展示了共置和查询键工厂如何使生活更轻松。 阅读更多...
在这篇对上一篇博文的补充中,我们将探讨如何利用查询函数上下文和对象查询键,在应用程序不断增长时实现最大程度的安全。阅读更多...
占位符数据和初始数据是两个相似但不同的概念,用于同步显示数据而不是加载微调器以改善应用程序的用户体验。这篇博文比较了两者,并概述了每种概念的适用场景。 阅读更多...
React Query 不会为您获取任何数据——它是一个数据同步工具,在用于服务器状态时表现出色。本文包含您需要了解的所有内容,以便将 React Query 作为异步状态的单一事实来源状态管理器。您将学习如何让 React Query 发挥其魔力,以及为什么自定义 staleTime 可能是您所需要的全部。 阅读更多...
处理错误是处理异步数据(尤其是数据获取)的重要组成部分。我们不得不面对:并非所有请求都会成功,并非所有 Promise 都会实现。这篇博文描述了处理 React Query 中错误的各种方法,例如 error 属性、使用 Error Boundaries 或 onError 回调,以便您可以为“发生错误”的情况做好应用程序的准备。 阅读更多...
Mutations 是处理服务器数据所必需的第二个重要部分——用于需要更新数据的情况。这篇博文涵盖了 mutations 是什么,以及它们与 queries 有何不同。您将了解 mutate 和 mutateAsync 之间的区别,以及如何将 queries 和 mutations 结合起来。 阅读更多...
有许多方法可以生成 promise——而这正是 React Query 所需要的——但到目前为止,最大的用例是数据获取。通常,这需要活动的网络连接。但有时,尤其是在移动设备上,网络连接可能不可靠,您需要您的应用程序也能在没有网络连接的情况下运行。在本文中,您将了解 React Query 提供的各种离线策略。 阅读更多...
表单往往会模糊服务器状态和客户端状态之间的界限。在大多数应用程序中,我们不仅希望显示状态,还希望让用户与之交互。本文展示了两种不同的方法以及一些关于将 React Query 与表单结合使用的技巧。 阅读更多...
本文试图回答关于 React Query 最常见的问题。阅读更多...
Remix 和 React Router 正在改变数据获取的时机。本文将深入探讨 React Query 和支持数据加载的路由器为何是天作之合。 阅读更多...
这篇博文展示了多种方法,可以在开始渲染之前将数据放入您的查询缓存中,以最大程度地减少应用程序中显示的加载微调器数量。选项包括在服务器或路由器上预取,以及通过 setQueryData 填充缓存条目。 阅读更多...
如果您曾想知道 React Query 在后台是如何工作的——这篇博文就是为您准备的。它解释了架构(包括图示),从通用的 Query Core 开始,以及它如何与特定于框架的适配器进行通信。 阅读更多...
“具有类型”和“类型安全”之间存在巨大差异。本文试图概述这些差异,并展示了在使用 React Query 与 TypeScript 结合时如何获得最佳的类型安全性 阅读更多...
如果您的应用程序不依赖于客户端数据获取,尤其是在使用 Next.js 或 Remix 等带有内置服务器组件的框架时,React Query 可能是不必要的。尽管如此,它在混合用例(如无限滚动或离线支持)中仍然表现出色,其智能缓存和重新验证功能非常宝贵。 阅读更多...
React Query 不是一个数据获取库——它是一个异步状态管理器,旨在将参数视为依赖项,通过 staleTime 优化重新获取行为,并鼓励以 queryKey 驱动缓存和更新的声明性模式。改变一点思维方式可以极大地简化您使用 React Query 的方式。 阅读更多...
React Query 允许组件独立管理自己的数据,使其自给自足且具有弹性,但当共享数据(如在更高级别获取的用户信息)在树的更深层被需要时,React Context 可以使这种隐式依赖关系变得显式且更安全。 阅读更多...
虽然在 useEffect 中使用 fetch 获取数据可能看起来很简单,但它很快就会陷入竞态条件、缺少加载状态、过时数据和严格模式怪癖等 bug——使异步状态管理比看起来复杂得多。 阅读更多...
React Query v5 引入了一个统一的“Query Options”API——所有函数如 useQuery、invalidateQueries 和命令式调用都接受一个单一对象——简化了接口,并使得在不同查询上下文之间重用更加容易,同时提高了类型安全性。 阅读更多...
React Query 不会自动将 mutations 与 queries 绑定——但您可以在中央 MutationCache 中利用“全局缓存回调”来定义共享行为,例如在每次 mutation 时使查询无效。 阅读更多...
这篇博文深入探讨了 Infinite Queries 的设计和底层工作原理。有趣的是,没有明确的 InfiniteQuery 表示——只是附加到常规 Query 的一种不同的“行为”。 阅读更多...
在这次演讲中,Dominik 带领我们回顾了 React Query 中做出的一些 API 设计选择,以实现其公认的良好开发者体验。您将听到关于顺利进行的事务的故事,也关于权衡和错误,以及我们所有人都可以从中吸取的教训。 阅读更多...
在这次演讲中,Dominik 探讨了 React Query 的不太理想的方面以及它可能不适合的情况。没有完美的库;每个选择都涉及权衡。在演讲结束时,您将更好地理解 React Query 的局限性,以及为什么尽管存在这些局限性,它仍然是一个引人注目的选择。 阅读更多...
React Query 中的乐观更新可能会导致多个 mutations 同时运行时出现竞态条件,从而导致 UI 状态不一致。取消进行中的查询可以有所帮助,但重叠的无效化可能仍然会覆盖较新的更新。 阅读更多...
React Query 的 select 选项使组件能够仅订阅查询数据中它们关心的特定部分——因此更新一个字段不会不必要地导致不相关的 UI 重新渲染。这种细粒度的方法将完整响应保留在缓存中,同时优化组件更新以提高性能。 阅读更多...