并行查询
“并行”查询是指同时执行的查询,以最大化拉取并发性。
手动并行查询
当并行查询的数量保持不变时,使用并行查询无需额外工作。只需并排使用任意数量的 TanStack Query 的 useQuery 和 useInfiniteQuery Hook 即可!
HTML
1<script setup lang="ts">2// The following queries will execute in parallel3const usersQuery = useQuery({ queryKey: ['users'], queryFn: fetchUsers })4const teamsQuery = useQuery({ queryKey: ['teams'], queryFn: fetchTeams })5const projectsQuery = useQuery({6 queryKey: ['projects'],7 queryFn: fetchProjects,8})9</script>使用 useQueries 实现动态并行查询
如果每次渲染所需执行的查询数量会发生变化,则无法使用手动查询方式,因为这会违反 Hook 的规则。为此,TanStack Query 提供了 useQueries Hook,你可以用它来动态地并行执行任意数量的查询。
useQueries 接收一个选项对象,该对象包含一个 queries 键,其值为一个查询对象数组。它返回一个查询结果数组:
JavaScript
1const users = computed(...)2const queries = computed(() => users.value.map(user => {3 return {4 queryKey: ['user', user.id],5 queryFn: () => fetchUserById(user.id),6 }7 })8);9const userQueries = useQueries({queries: queries})在使用 TypeScript 时,若在传入
useQueries的查询对象上内联编写select,则该select无法从同一对象的queryFn推断出其data参数类型 —— 此时将回退至unknown。请显式标注select参数的类型,或使用queryOptions辅助函数定义查询,以维持类型推断能力。参见 此已知限制。