查询选项
在多个地方共享 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 辅助函数。
你仍然可以在组件级别覆盖某些选项。一种非常常见且有用的模式是为每个组件创建 select 函数:
// 类型推断仍然有效,因此 query.data 将是 select 的返回类型,而不是 queryFn 的返回类型
const query = useQuery({
...groupOptions(1),
select: (data) => data.groupName,
})最后更新于
这有帮助吗?