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

createQueries

更新于 2026-11-02 Solid 查看英文原文 ↗
TypeScript
1const createQueries: <T, TCombinedResult>(queriesOptions: Accessor<{2  combine?: (result: T extends [] ? [] : T extends [Head] ? [GetResults<Head>] : T extends [Head, ...Tail[]] ? [...Tail[]] extends [] ? [] : [...(...)[]] extends [...] ? [..., ...] : ... extends ... ? ... : ... : { [K in string | number | symbol]: GetResults<(...)[(...)]> }) => TCombinedResult;3  queries:   | readonly [T extends [] ? [] : T extends [Head] ? [GetOptions<Head>] : T extends [Head, ...Tail[]] ? [...Tail[]] extends [] ? [] : [...(...)[]] extends [...] ? [..., ...] : ... extends ... ? ... : ... : readonly unknown[] extends T ? T : T extends ...[] ? ...[] : ...[]]4     | readonly [{ [K in string | number | symbol]: GetOptions<T[K]> }];5}>, queryClient?: Accessor<QueryClient>) => TCombinedResult = useQueries;

定义于:packages/solid-query/src/index.ts:86

useQueries 原语可用于拉取可变数量的查询。

queries 参数接受一个查询选项对象数组,其结构与 useQuery 大致相同——二者唯一区别见下方 placeholderData。自定义 QueryClient 仅需提供一次,作为 useQueries 自身顶层的第二个参数,而非为每个查询单独提供。

若在查询对象数组中多次使用相同的查询键,可能导致部分数据在多个查询间共享。为避免此情况,请考虑先对查询去重,再将结果映射回所需结构。

combine 选项可用于将各查询结果合并为单个值。该结果将尽可能保持结构共享,以实现最高的引用稳定性。

placeholderData 在此处同样受支持,但与 useQuery 不同,它不会接收先前已渲染查询的信息,因为每次渲染时查询数量可能不同。

类型参数

T

T extends any[]

TCombinedResult

TCombinedResult extends | [] | [ | QueryObserverRefetchErrorResult<unknown, Error> | QueryObserverSuccessResult<unknown, Error> | QueryObserverLoadingErrorResult<unknown, Error> | QueryObserverLoadingResult<unknown, Error> | QueryObserverPendingResult<unknown, Error> | QueryObserverPlaceholderResult<unknown, Error> | QueryObserverRefetchErrorResult<unknown, unknown> | QueryObserverSuccessResult<unknown, unknown> | QueryObserverLoadingErrorResult<unknown, unknown> | QueryObserverLoadingResult<unknown, unknown> | QueryObserverPendingResult<unknown, unknown> | QueryObserverPlaceholderResult<unknown, unknown>] | ( | QueryObserverRefetchErrorResult<unknown, Error> | QueryObserverSuccessResult<unknown, Error> | QueryObserverLoadingErrorResult<unknown, Error> | QueryObserverLoadingResult<unknown, Error> | QueryObserverPendingResult<unknown, Error> | QueryObserverPlaceholderResult<unknown, Error> | QueryObserverRefetchErrorResult<unknown, unknown> | QueryObserverSuccessResult<unknown, unknown> | QueryObserverLoadingErrorResult<unknown, unknown> | QueryObserverLoadingResult<unknown, unknown> | QueryObserverPendingResult<unknown, unknown> | QueryObserverPlaceholderResult<unknown, unknown>)[] = T extends [] ? [] : T extends [Head] ? [GetResults<Head>] : T extends [Head, ...Tail[]] ? [...Tail[]] extends [] ? [] : [...Tail[]] extends [Head] ? [GetResults<Head>, GetResults<Head>] : [...Tail[]] extends [Head, ...Tail[]] ? [...Tail[]] extends [] ? [] : [...Tail[]] extends [Head] ? [GetResults<...>, GetResults<...>, GetResults<...>] : [...(...)[]] extends [..., ...(...)[]] ? ... extends ... ? ... : ... : [...(...)[]] : [...{ [K in string | number | symbol]: GetResults<(...)[(...)]> }[]] : { [K in string | number | symbol]: GetResults<T[K]> }

参数

queriesOptions

Accessor<{ combine?: (result: T extends [] ? [] : T extends [Head] ? [GetResults<Head>] : T extends [Head, ...Tail[]] ? [...Tail[]] extends [] ? [] : [...(...)[]] extends [...] ? [..., ...] : ... extends ... ? ... : ... : { [K in string | number | symbol]: GetResults<(...)[(...)]> }) => TCombinedResult; queries: | readonly [T extends [] ? [] : T extends [Head] ? [GetOptions<Head>] : T extends [Head, ...Tail[]] ? [...Tail[]] extends [] ? [] : [...(...)[]] extends [...] ? [..., ...] : ... extends ... ? ... : ... : readonly unknown[] extends T ? T : T extends ...[] ? ...[] : ...[]] | readonly [{ [K in string | number | symbol]: GetOptions<T[K]> }]; }>

一个返回要执行的 queries 数组的访问器,以及一个可选的 combine 函数。

queryClient?

Accessor<QueryClient>

一个用于获取自定义 QueryClient 的访问器。否则将使用最近上下文中的 QueryClient。

返回值

TCombinedResult

合并后的结果。未提供 combine 时,该结果为一个数组,包含所有查询结果,顺序与输入一致;提供 combine 时,则为 combine 返回的值。

示例

TypeScript
1import { For } from 'solid-js'2import { useQueries } from '@tanstack/solid-query'3 4function Posts(props: { ids: Array<number> }) {5  const postQueries = useQueries(() => ({6    queries: props.ids.map((id) => ({7      queryKey: ['post', id],8      queryFn: () => fetchPost(id),9      staleTime: Infinity,10    })),11  }))12 13  return (14    <ul>15      <For each={postQueries}>16        {(postQuery) => {17          if (postQuery.isPending) return <li>Loading...</li>18          if (postQuery.isError) return <li>Error: {postQuery.error.message}</li>19          return <li>{postQuery.data.title}</li>20        }}21      </For>22    </ul>23  )24}

将结果合并为单个值:

TypeScript
1import { For, Match, Switch } from 'solid-js'2import { useQueries } from '@tanstack/solid-query'3 4function Posts(props: { ids: Array<number> }) {5  const combinedPostsQuery = useQueries(() => ({6    queries: props.ids.map((id) => ({7      queryKey: ['post', id],8      queryFn: () => fetchPost(id),9    })),10    combine: (postQueries) => {11      return {12        data: postQueries.map((postQuery) => postQuery.data),13        isPending: postQueries.some((postQuery) => postQuery.isPending),14        isError: postQueries.some((postQuery) => postQuery.isError),15      }16    },17  }))18 19  return (20    <Switch21      fallback={22        <ul>23          <For each={combinedPostsQuery.data}>{(post) => <li>{post?.title}</li>}</For>24        </ul>25      }26    >27      <Match when={combinedPostsQuery.isPending}>Loading...</Match>28      <Match when={combinedPostsQuery.isError}>Error loading posts</Match>29    </Switch>30  )31}

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

译自上游 59d11de