译零 TransZero · TanStack Query v3 中文文档
主站

查询重试 query-retries

当useQuery查询失败(查询函数引发错误)时,如果该查询的请求未达到最大连续重试次数(默认为 3),或者提供了一个函数来确定是否允许重试,则 React Query 将自动重试该查询。

您可以在全局级别和单个查询级别上配置重试逻辑。

  • 设置retry = false将禁用重试
  • 设置retry = 6将重试失败的次数设置为 6 次,然后显示该函数引发的最终错误
  • 设置retry = true将无限次重试失败的请求
  • 设置retry =(failureCount,error)=> ...允许基于请求失败的原因进行自定义逻辑
JavaScript
1import { useQuery } from "react-query";2 3// 对特定的一个查询设置固定的重试次数4const result = useQuery(["todos", 1], fetchTodoListPage, {5  retry: 10, // 在显示错误之前,将重试10次6});

重试延迟

默认情况下,请求失败后,React Query 中的重试不会立即发生。按照标准,后退延迟将逐渐应用于每次重试尝试。

默认的retryDelay设置为以二的倍数递增(从1000ms开始),但不超过 30 秒:

JavaScript
1// 为所有查询配置2import { QueryCache, QueryClient, QueryClientProvider } from "react-query";3 4const queryClient = new QueryClient({5  defaultOptions: {6    queries: {7      retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000),8    },9  },10});11 12function App() {13  return <QueryClientProvider client={queryClient}>...</QueryClientProvider>;14}

尽管不建议这样做,但是显然可以在 Provider 和单个查询选项中覆盖retryDelay函数/整数。 如果设置为整数而不是函数,则延迟将始终是相同的时间量:

JavaScript
1const result = useQuery("todos", fetchTodoList, {2  retryDelay: 1000, // 无论重试多少次,都会始终等待1000毫秒重试3});

本页为 TanStack Query 文档(React 版)的非官方中文翻译,原文由上游团队维护,遵循 MIT 许可。 译文如有偏差,以英文原文为准。

本页译文取自社区中文版 react-query-web-i18n(MIT),非本站翻译,已停止更新,内容可能与当前 API 有出入。

译自上游 (未记录版本)