查询选项
共享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
});
最后更新于
这有帮助吗?