前端
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 提供支持
在本页

这有帮助吗?

  1. Query

查询选项

共享queryKey和queryFn在多个地方使用,同时将它们紧密结合的一个最佳方式是使用 queryOptions 辅助函数。在运行时,这个辅助函数只是返回你传递给它的内容,但在使用 TypeScript 时,它有很多优点。你可以在一个地方定义查询的所有可能选项,并且可以获得所有选项的类型推断和类型安全。

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

function groupOptions(id: number) {
  return queryOptions({
    queryKey: ["groups", id],
    queryFn: () => fetchGroups(id),
    staleTime: 5 * 1000
  });
}

// 使用示例:
useQuery(groupOptions(1));
useSuspenseQuery(groupOptions(5));
useQueries({
  queries: [groupOptions(1), groupOptions(2)]
});
queryClient.prefetchQuery(groupOptions(23));
queryClient.setQueryData(groupOptions(42).queryKey, newGroups);

对于无限查询(Infinite Queries),有一个单独的 infiniteQueryOptions 辅助函数可用。

你仍然可以在组件级别覆盖某些选项。一个非常常见且有用的模式是为每个组件创建选择函数:

// 类型推断仍然有效,因此 query.data 将是 select 返回类型,而不是 queryFn 返回类型

const query = useQuery({
  ...groupOptions(1),
  select: (data) => data.groupName
});
上一页查询函数下一页并行查询

最后更新于2个月前

这有帮助吗?