前端
PythonJava运维数据库
TanStack Query
TanStack Query
  • getting started
    • 快速开始
    • 开发工具
    • Typescript
    • 默认配置
    • 网络模式
  • Query
    • 查询
    • 查询键
    • 查询函数
    • 查询选项
    • 并行查询
    • 有依赖的查询
    • 查询状态指示器
    • 窗口聚焦重新获取数据
    • 禁用/暂停查询
    • 查询重试
    • 分页查询
    • 无限查询
    • 初始化查询数据
  • 占位符
  • Mutation
    • 修改 Mutations
    • 主动查询失效 Query Invalidation
    • 修改导致的失效 Invalidation From Mutations
    • 通过修改的数据更新查询内容
    • 乐观更新
  • 取消查询
  • 默认查询函数
  • 过滤器
  • Suspense
  • 缓存数据
  • Api Reference
    • QueryClient
    • QueryCache
    • MutationCache
    • QueryObserver QueriesObserver
    • InfiniteQueryObserver
    • FocusManager
    • NotifyManager
    • useQuery
    • useQueries useInfiniteQuery
    • useMutation
    • useIsFetching
    • useIsMutating
    • useMutationState
    • useSuspenseQuery
    • useSuspenseInfiniteQuery
    • useSuspenseQueries
    • QueryClientProvider
    • useQueryClient
    • queryOptions
    • infiniteQueryOptions
    • QueryErrorResetBoundary
    • useQueryErrorResetBoundary
    • hydration
由 GitBook 提供支持
在本页
  • 配置查询重试
  • 重试延迟(Retry Delay)
  • 覆盖重试延迟

这有帮助吗?

  1. Query

查询重试

在 TanStack Query 中,当查询函数抛出错误时,系统会自动重试查询,直到达到最大连续重试次数(默认为 3 次),或者提供一个函数来确定是否允许重试。

配置查询重试

您可以在全局级别和单个查询级别进行配置。

  • 禁用重试:设置 retry = false 会禁用重试。

  • 设置最大重试次数:设置 retry = 6 会在失败请求重试 6 次后才会显示最终的错误。

  • 无限重试:设置 retry = true 会无限重试失败的请求。

  • 自定义重试逻辑:设置 retry = (failureCount, error) => ... 可以根据请求失败的原因自定义重试逻辑

在服务器端,默认的重试次数为 0,以确保服务器渲染尽可能快。

示例:指定重试次数。

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

const result = useQuery({
  queryKey: ["todos", 1],
  queryFn: fetchTodoListPage,
  retry: 10 // 会重试失败的请求 10 次,直到出现错误
});

Info:在每次重试时,错误内容将成为 failureReason 响应属性的一部分,直到最后一次重试。如果错误在所有重试尝试后依然存在,则错误会成为 error 属性。

重试延迟(Retry Delay)

默认情况下,在 TanStack Query 中,重试请求并不会立即发生。标准的做法是在每次重试时应用逐步递增的延迟。

默认的 retryDelay 设置是每次重试的延迟时间以双倍的方式增加(从 1000ms 开始),但最大不会超过 30 秒。

示例:全局配置重试延迟

import { QueryCache, QueryClient, QueryClientProvider } from "@tanstack/react-query";

const queryClient = new QueryClient({
  defaultOptions: {
    queries: {
      retryDelay: (attemptIndex) => Math.min(1000 * 2 ** attemptIndex, 30000)
    }
  }
});

function App() {
  return <QueryClientProvider client={queryClient}>...</QueryClientProvider>;
}

覆盖重试延迟

虽然不推荐,您也可以在查询的 Provider 和单个查询选项中覆盖 retryDelay 函数或整数。如果设置为整数,则延迟将始终是相同的时间,而不管重试次数如何。

示例:指定固定的重试延迟

const result = useQuery({
  queryKey: ["todos"],
  queryFn: fetchTodoList,
  retryDelay: 1000 // 每次重试都会等待 1000ms
});
上一页禁用/暂停查询下一页分页查询

最后更新于2个月前

这有帮助吗?