译零 TransZero · TanStack Query 中文文档
主站

并行查询

更新于 2026-11-02 React 查看英文原文 ↗

“并行”查询是指同时执行的查询,以最大化拉取并发性。

手动并行查询

当并行查询的数量不发生变化时,使用并行查询无需额外工作。只需并排使用任意数量的 TanStack Query 的 useQuery 和 useInfiniteQuery Hook 即可!

TypeScript
1function App () {2  // The following queries will execute in parallel3  const usersQuery = useQuery({ queryKey: ['users'], queryFn: fetchUsers })4  const teamsQuery = useQuery({ queryKey: ['teams'], queryFn: fetchTeams })5  const projectsQuery = useQuery({ queryKey: ['projects'], queryFn: fetchProjects })6  ...7}

在 Suspense 模式下使用 React Query 时,这种并行模式无法生效,因为第一个查询会在内部抛出 Promise,导致组件在其他查询运行前即被挂起。要规避此问题,你需改用 useSuspenseQueries Hook(推荐做法),或为每个 useSuspenseQuery 实例分别创建独立组件,自行编排并行逻辑。

使用 useQueries 动态执行并行查询

若你需要执行的查询数量在每次渲染时都可能变化,则无法使用手动查询方式,否则将违反 Hook 规则。为此,TanStack Query 提供了 useQueries Hook,允许你动态地并行执行任意数量的查询。

useQueries 接收一个选项对象,该对象包含一个 queries 键,其值为一个查询对象数组。它返回一个查询结果数组:

TypeScript
1function App({ users }) {2  const userQueries = useQueries({3    queries: users.map((user) => {4      return {5        queryKey: ['user', user.id],6        queryFn: () => fetchUserById(user.id),7      }8    }),9  })10}

在 TypeScript 中,若直接在传入 useQueries 的查询对象上编写内联 select,该 select 无法从同一对象的 queryFn 推断其 data 参数类型,而会回退至 unknown。请显式标注 select 参数类型,或使用 queryOptions 辅助函数定义查询,以维持类型推断能力。参见 此已知限制。

本页为 TanStack Query 文档(React 版)的非官方中文翻译,原文由上游团队维护,遵循 MIT 许可。 译文如有偏差,以英文原文为准。

译自上游 59d11de