createQueries
1function createQueries<T extends any[], TCombinedResult = T extends [] ? [] : T extends [Head] ? [GetCreateQueryResult<Head>] : T extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryResult<Head>, GetCreateQueryResult<Head>] : [...Tails[]] extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryResult<Head>, GetCreateQueryResult<Head>, GetCreateQueryResult<Head>] : [...Tails[]] extends [Head, ...Tails[]] ? [...(...)[]] extends [] ? [] : ... extends ... ? ... : ... : [...{ [K in (...)]: (...) }[]] : [...{ [K in string | number | symbol]: GetCreateQueryResult<Tails[K]> }[]] : { [K in string | number | symbol]: GetCreateQueryResult<T[K]> }>(createQueriesOptions: Accessor<{2 combine?: (result: T extends [] ? [] : T extends [Head] ? [GetCreateQueryResult<Head>] : T extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryResult<...>, GetCreateQueryResult<...>] : [...(...)[]] extends [..., ...(...)[]] ? ... extends ... ? ... : ... : [...(...)[]] : { [K in string | number | symbol]: GetCreateQueryResult<T[K]> }) => TCombinedResult;3 queries: | readonly [T extends [] ? [] : T extends [Head] ? [GetCreateQueryOptionsForCreateQueries<Head>] : T extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryOptionsForCreateQueries<...>, GetCreateQueryOptionsForCreateQueries<...>] : [...(...)[]] extends [..., ...(...)[]] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : readonly unknown[] extends T ? T : T extends CreateQueryOptionsForCreateQueries<..., ..., ..., ...>[] ? CreateQueryOptionsForCreateQueries<..., ..., ..., ...>[] : CreateQueryOptionsForCreateQueries<..., ..., ..., ...>[]]4 | readonly [{ [K in string | number | symbol]: GetCreateQueryOptionsForCreateQueries<T[K]> }];5}>, queryClient?: Accessor<QueryClient>): TCombinedResult;定义于:packages/svelte-query/src/createQueries.svelte.ts:259
createQueries 函数可用于拉取可变数量的查询。
类型参数
T
T extends any[]
TCombinedResult
TCombinedResult = T extends [] ? [] : T extends [Head] ? [GetCreateQueryResult<Head>] : T extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryResult<Head>, GetCreateQueryResult<Head>] : [...Tails[]] extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryResult<Head>, GetCreateQueryResult<Head>, GetCreateQueryResult<Head>] : [...Tails[]] extends [Head, ...Tails[]] ? [...(...)[]] extends [] ? [] : ... extends ... ? ... : ... : [...{ [K in (...)]: (...) }[]] : [...{ [K in string | number | symbol]: GetCreateQueryResult<Tails[K]> }[]] : { [K in string | number | symbol]: GetCreateQueryResult<T[K]> }
参数
createQueriesOptions
Accessor<{
combine?: (result: T extends [] ? [] : T extends [Head] ? [GetCreateQueryResult<Head>] : T extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryResult<...>, GetCreateQueryResult<...>] : [...(...)[]] extends [..., ...(...)[]] ? ... extends ... ? ... : ... : [...(...)[]] : { [K in string | number | symbol]: GetCreateQueryResult<T[K]> }) => TCombinedResult;
queries: | readonly [T extends [] ? [] : T extends [Head] ? [GetCreateQueryOptionsForCreateQueries<Head>] : T extends [Head, ...Tails[]] ? [...Tails[]] extends [] ? [] : [...Tails[]] extends [Head] ? [GetCreateQueryOptionsForCreateQueries<...>, GetCreateQueryOptionsForCreateQueries<...>] : [...(...)[]] extends [..., ...(...)[]] ? ... extends ... ? ... : ... : ... extends ... ? ... : ... : readonly unknown[] extends T ? T : T extends CreateQueryOptionsForCreateQueries<..., ..., ..., ...>[] ? CreateQueryOptionsForCreateQueries<..., ..., ..., ...>[] : CreateQueryOptionsForCreateQueries<..., ..., ..., ...>[]]
| readonly [{ [K in string | number | symbol]: GetCreateQueryOptionsForCreateQueries<T[K]> }];
}>
要运行的 queries 数组,以及一个可选的 combine 函数;该函数被包裹在 Accessor 中,以便选项可响应式更新。
queryClient?
使用此参数指定自定义 QueryClient。否则将使用最近上下文中的 QueryClient。
返回值
TCombinedResult
一个数组,其中每个元素对应一个查询的结果,顺序与 queries 相同;若提供了 combine,则返回 combine 的返回值。
示例
1<script lang="ts">2 import { createQueries } from '@tanstack/svelte-query'3 4 let { ids }: { ids: Array<number> } = $props()5 6 const postQueries = createQueries(() => ({7 queries: ids.map((id) => ({8 queryKey: ['post', id],9 queryFn: () => fetchPost(id),10 staleTime: Infinity,11 })),12 }))13</script>14 15<ul>16 {#each postQueries as query, index (ids[index])}17 {#if query.isPending}18 <li>Loading...</li>19 {:else if query.isError}20 <li>Error: {query.error.message}</li>21 {:else}22 <li>{query.data.title}</li>23 {/if}24 {/each}25</ul>将结果合并为单个值:
1<script lang="ts">2 import { createQueries } from '@tanstack/svelte-query'3 4 let { ids }: { ids: Array<number> } = $props()5 6 const combined = createQueries(() => ({7 queries: ids.map((id) => ({8 queryKey: ['post', id],9 queryFn: () => fetchPost(id),10 })),11 combine: (postQueries) => ({12 data: postQueries.map((query) => query.data),13 isPending: postQueries.some((query) => query.isPending),14 isError: postQueries.some((query) => query.isError),15 }),16 }))17</script>18 19{#if combined.isPending}20 Loading...21{:else if combined.isError}22 Error loading posts23{:else}24 <ul>25 {#each combined.data as post}26 <li>{post?.title}</li>27 {/each}28 </ul>29{/if}