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

useInfiniteQuery

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

概述

TypeScript
1function useInfiniteQuery<TQueryFnData, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(options: DefinedInitialDataInfiniteOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient?: QueryClient): DefinedUseInfiniteQueryResult<TData, TError>;2function useInfiniteQuery<TQueryFnData, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(options: UndefinedInitialDataInfiniteOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient?: QueryClient): UseInfiniteQueryResult<TData, TError>;3function useInfiniteQuery<TQueryFnData, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(options: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient?: QueryClient): UseInfiniteQueryResult<TData, TError>;

另请参阅:参数 · 返回值

调用签名

TypeScript
1function useInfiniteQuery<TQueryFnData, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(options: DefinedInitialDataInfiniteOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient?: QueryClient): DefinedUseInfiniteQueryResult<TData, TError>;

定义于:packages/preact-query/src/useInfiniteQuery.ts:63

useInfiniteQuery 的选项与 useQuery 完全相同,额外增加了 initialPageParam、getNextPageParam、getPreviousPageParam 和 maxPages。

当 initialData 已知被定义时,将选用此重载。

类型参数

TQueryFnData

TQueryFnData

TError

TError = Error

TData

TData = InfiniteData<TQueryFnData, unknown>

TQueryKey

TQueryKey extends readonly unknown[] = readonly unknown[]

TPageParam

TPageParam = unknown

参数

options

DefinedInitialDataInfiniteOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>

要使用的 DefinedInitialDataInfiniteOptions —— 即可传给 useInfiniteQuery 的所有内容,且 initialData 已知被定义。

queryClient?

QueryClient

使用此参数可指定自定义的 QueryClient;否则将使用离当前组件最近的上下文中的 QueryClient。

返回值

DefinedUseInfiniteQueryResult<TData, TError>

与 useQuery 相同的属性,并额外增加了 fetchNextPage、fetchPreviousPage、hasNextPage、hasPreviousPage、isFetchingNextPage 和 isFetchingPreviousPage。只要 select 未将 TData 修改为偏离其默认的 InfiniteData<TQueryFnData> 形状,也会添加 data.pages 和 data.pageParams。

备注

请注意,命令式拉取调用(例如 fetchNextPage)可能会干扰默认的重新拉取行为,导致数据过期。请确保仅在响应用户操作时调用这些函数,或添加类似 hasNextPage && !isFetching 的条件判断。

参见

infiniteQueryOptions,用于在 useInfiniteQuery 与 queryClient.infiniteQuery 等命令式 API 之间共享这些选项。

示例

TypeScript
1import { useInfiniteQuery } from '@tanstack/preact-query'2 3function Projects() {4  // `data` is never `undefined`, thanks to `initialData` — even if a refetch fails, so the5  // list stays visible alongside the error.6  const { data, isError, error } = useInfiniteQuery({7    queryKey: ['projects'],8    queryFn: ({ pageParam }) => fetchProjects(pageParam),9    initialPageParam: 0,10    getNextPageParam: (lastPage) => lastPage.nextId,11    initialData: { pages: [], pageParams: [] },12  })13 14  return (15    <div>16      {isError ? <span>Error: {error.message}</span> : null}17      <ul>18        {data.pages.map((page) => page.projects.map((p) => <li key={p.id}>{p.name}</li>))}19      </ul>20    </div>21  )22}

调用签名

TypeScript
1function useInfiniteQuery<TQueryFnData, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(options: UndefinedInitialDataInfiniteOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient?: QueryClient): UseInfiniteQueryResult<TData, TError>;

定义于:packages/preact-query/src/useInfiniteQuery.ts:186

useInfiniteQuery 的选项与 useQuery 完全相同,额外增加了 initialPageParam、getNextPageParam、getPreviousPageParam 和 maxPages。

类型参数

TQueryFnData

TQueryFnData

TError

TError = Error

TData

TData = InfiniteData<TQueryFnData, unknown>

TQueryKey

TQueryKey extends readonly unknown[] = readonly unknown[]

TPageParam

TPageParam = unknown

参数

options

UndefinedInitialDataInfiniteOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>

要使用的 UndefinedInitialDataInfiniteOptions —— 即可传给 useInfiniteQuery 的所有内容。

queryClient?

QueryClient

使用此参数可指定自定义的 QueryClient;否则将使用离当前组件最近的上下文中的 QueryClient。

返回值

UseInfiniteQueryResult<TData, TError>

与 useQuery 相同的属性,并额外增加了 fetchNextPage、fetchPreviousPage、hasNextPage、hasPreviousPage、isFetchingNextPage 和 isFetchingPreviousPage。只要 select 未将 TData 修改为偏离其默认的 InfiniteData<TQueryFnData> 形状,也会添加 data.pages 和 data.pageParams。

备注

请注意,命令式拉取调用(例如 fetchNextPage)可能会干扰默认的重新拉取行为,导致数据过期。请确保仅在响应用户操作时调用这些函数,或添加类似 hasNextPage && !isFetching 的条件判断。

参见

infiniteQueryOptions,用于在 useInfiniteQuery 与 queryClient.infiniteQuery 等命令式 API 之间共享这些选项。

示例

从「加载更多」按钮点击事件中拉取下一页:

TypeScript
1import { useInfiniteQuery } from '@tanstack/preact-query'2 3function Projects() {4  const { data, isPending, isError, error, fetchNextPage, hasNextPage, isFetching, isFetchingNextPage } =5    useInfiniteQuery({6      queryKey: ['projects'],7      queryFn: ({ pageParam }) => fetchProjects(pageParam),8      initialPageParam: 0,9      getNextPageParam: (lastPage) => lastPage.nextId,10    })11 12  if (isPending) return 'Loading...'13  if (isError) return <span>Error: {error.message}</span>14 15  return (16    <>17      <ul>18        {data.pages.map((page) =>19          page.projects.map((project) => <li key={project.id}>{project.name}</li>),20        )}21      </ul>22      <button23        onClick={() => fetchNextPage()}24        disabled={!hasNextPage || isFetching}25      >26        {isFetchingNextPage27          ? 'Loading more...'28          : hasNextPage29            ? 'Load More'30            : 'Nothing more to load'}31      </button>32    </>33  )34}

利用列表末尾的哨兵元素上的 IntersectionObserver,在用户滚动时自动拉取下一页:

TypeScript
1import { useInfiniteQuery } from '@tanstack/preact-query'2import { useEffect, useRef } from 'preact/hooks'3 4function Projects() {5  const {6    data,7    isPending,8    isError,9    error,10    fetchNextPage,11    hasNextPage,12    isFetching,13    isFetchingNextPage,14  } = useInfiniteQuery({15    queryKey: ['projects'],16    queryFn: ({ pageParam }) => fetchProjects(pageParam),17    initialPageParam: 0,18    getNextPageParam: (lastPage) => lastPage.nextId,19  })20 21  const sentinelRef = useRef<HTMLDivElement>(null)22 23  useEffect(() => {24    const sentinel = sentinelRef.current25    if (sentinel == null || !hasNextPage || isFetching) return26 27    const observer = new IntersectionObserver(([entry]) => {28      if (entry?.isIntersecting) fetchNextPage()29    })30    observer.observe(sentinel)31 32    return () => observer.disconnect()33  }, [hasNextPage, isFetching, fetchNextPage])34 35  if (isPending) return 'Loading...'36  if (isError) return <span>Error: {error.message}</span>37 38  return (39    <>40      <ul>41        {data.pages.map((page) =>42          page.projects.map((project) => <li key={project.id}>{project.name}</li>),43        )}44      </ul>45      <div ref={sentinelRef}>{isFetchingNextPage ? 'Loading more...' : null}</div>46    </>47  )48}

调用签名

TypeScript
1function useInfiniteQuery<TQueryFnData, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(options: UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>, queryClient?: QueryClient): UseInfiniteQueryResult<TData, TError>;

定义于:packages/preact-query/src/useInfiniteQuery.ts:338

useInfiniteQuery 的选项与 useQuery 完全相同,额外增加了 initialPageParam、getNextPageParam、getPreviousPageParam 和 maxPages。

类型参数

TQueryFnData

TQueryFnData

TError

TError = Error

TData

TData = InfiniteData<TQueryFnData, unknown>

TQueryKey

TQueryKey extends readonly unknown[] = readonly unknown[]

TPageParam

TPageParam = unknown

参数

options

UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>

要使用的 UseInfiniteQueryOptions —— 即可传给 useInfiniteQuery 的所有内容。

queryClient?

QueryClient

使用此参数可指定自定义的 QueryClient;否则将使用离当前组件最近的上下文中的 QueryClient。

返回值

UseInfiniteQueryResult<TData, TError>

与 useQuery 相同的属性,并额外增加了 fetchNextPage、fetchPreviousPage、hasNextPage、hasPreviousPage、isFetchingNextPage 和 isFetchingPreviousPage。只要 select 未将 TData 修改为偏离其默认的 InfiniteData<TQueryFnData> 形状,也会添加 data.pages 和 data.pageParams。

备注

请注意,命令式拉取调用(例如 fetchNextPage)可能会干扰默认的重新拉取行为,导致数据过期。请确保仅在响应用户操作时调用这些函数,或添加类似 hasNextPage && !isFetching 的条件判断。

参见

infiniteQueryOptions,用于在 useInfiniteQuery 与 queryClient.infiniteQuery 等命令式 API 之间共享这些选项。

示例

从「加载更多」按钮点击事件中拉取下一页:

TypeScript
1import { useInfiniteQuery } from '@tanstack/preact-query'2 3function Projects() {4  const { data, isPending, isError, error, fetchNextPage, hasNextPage, isFetching, isFetchingNextPage } =5    useInfiniteQuery({6      queryKey: ['projects'],7      queryFn: ({ pageParam }) => fetchProjects(pageParam),8      initialPageParam: 0,9      getNextPageParam: (lastPage) => lastPage.nextId,10    })11 12  if (isPending) return 'Loading...'13  if (isError) return <span>Error: {error.message}</span>14 15  return (16    <>17      <ul>18        {data.pages.map((page) =>19          page.projects.map((project) => <li key={project.id}>{project.name}</li>),20        )}21      </ul>22      <button23        onClick={() => fetchNextPage()}24        disabled={!hasNextPage || isFetching}25      >26        {isFetchingNextPage27          ? 'Loading more...'28          : hasNextPage29            ? 'Load More'30            : 'Nothing more to load'}31      </button>32    </>33  )34}

利用列表末尾的哨兵元素上的 IntersectionObserver,在用户滚动时自动拉取下一页:

TypeScript
1import { useInfiniteQuery } from '@tanstack/preact-query'2import { useEffect, useRef } from 'preact/hooks'3 4function Projects() {5  const {6    data,7    isPending,8    isError,9    error,10    fetchNextPage,11    hasNextPage,12    isFetching,13    isFetchingNextPage,14  } = useInfiniteQuery({15    queryKey: ['projects'],16    queryFn: ({ pageParam }) => fetchProjects(pageParam),17    initialPageParam: 0,18    getNextPageParam: (lastPage) => lastPage.nextId,19  })20 21  const sentinelRef = useRef<HTMLDivElement>(null)22 23  useEffect(() => {24    const sentinel = sentinelRef.current25    if (sentinel == null || !hasNextPage || isFetching) return26 27    const observer = new IntersectionObserver(([entry]) => {28      if (entry?.isIntersecting) fetchNextPage()29    })30    observer.observe(sentinel)31 32    return () => observer.disconnect()33  }, [hasNextPage, isFetching, fetchNextPage])34 35  if (isPending) return 'Loading...'36  if (isError) return <span>Error: {error.message}</span>37 38  return (39    <>40      <ul>41        {data.pages.map((page) =>42          page.projects.map((project) => <li key={project.id}>{project.name}</li>),43        )}44      </ul>45      <div ref={sentinelRef}>{isFetchingNextPage ? 'Loading more...' : null}</div>46    </>47  )48}

一个被禁用、类型安全的查询,直到 postId 被设置为止 —— 将 skipToken 作为 queryFn 传入,而非设置 enabled: false:

TypeScript
1import { skipToken, useInfiniteQuery } from '@tanstack/preact-query'2 3function Comments({ postId }: { postId: string | undefined }) {4  // Use `isLoading`, not `isPending`, so the loading state doesn't show while the query is disabled.5  const { data, isLoading, isError, error } = useInfiniteQuery({6    queryKey: ['post', postId, 'comments'],7    queryFn:8      postId != null9        ? ({ pageParam }) => fetchComments(postId, pageParam)10        : skipToken,11    initialPageParam: 0,12    getNextPageParam: (lastPage) => lastPage.nextId,13  })14 15  if (postId == null) return 'Select a post'16  if (isLoading) return 'Loading...'17  if (isError) return <span>Error: {error.message}</span>18 19  return (20    <ul>21      {data?.pages.map((page) => page.comments.map((c) => <li key={c.id}>{c.text}</li>))}22    </ul>23  )24}

参数

options

UseInfiniteQueryOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>

要使用的 UseInfiniteQueryOptions —— 即可传给 useInfiniteQuery 的所有内容。

options 属性

属性 类型 默认值 描述
enabled? | false | true | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => boolean) true 将此选项设为 false 或返回 false 的函数,可禁用查询挂载或查询键变更时的自动重新拉取。如需重新拉取查询,请使用 useQuery 实例返回的 refetch 方法。该选项接受布尔值或返回布尔值的函数。
gcTime? number undefined 未使用/非活跃缓存数据在内存中保留的毫秒数。当某个查询的缓存变为未使用或非活跃状态后,该缓存数据将在该持续时间后被垃圾回收。若指定了多个垃圾回收时间,则采用最长的那个。设为 Infinity 将禁用垃圾回收。默认值为 5 * 60 * 1000(5 分钟),服务端渲染(SSR)期间默认为 Infinity。注意:受 setTimeout 的 32 位有符号整数延时限制,最大允许时间为约 24 天 —— 详见 timeoutManager.setTimeoutProvider 中的变通方案。
getNextPageParam (lastPage: TQueryFnData, allPages: TQueryFnData[], lastPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | null | undefined undefined 可设置此函数以自动获取无限查询的下一页游标。其返回结果也将用于确定 hasNextPage 的值。
getPreviousPageParam? (firstPage: TQueryFnData, allPages: TQueryFnData[], firstPageParam: TPageParam, allPageParams: TPageParam[]) => TPageParam | null | undefined undefined 可设置此函数以自动获取无限查询的上一页游标。其返回结果也将用于确定 hasPreviousPage 的值。
initialData? | InfiniteData<TQueryFnData, TPageParam> | (() => | InfiniteData<TQueryFnData, TPageParam> | undefined) undefined 若设置该值,它将作为查询缓存的初始数据(前提是该查询尚未创建或缓存)。若设为函数,该函数将在共享/根查询初始化期间仅执行一次,且需同步返回初始数据。默认情况下,初始数据被视为过期,除非已设置了 staleTime。initialData 会被持久化至缓存中。
initialDataUpdatedAt? number | (() => number | undefined) undefined 若设置该值,它将作为 initialData 本身最后一次更新的时间(毫秒)。
initialPageParam TPageParam undefined 当无限查询尚无任何页时,用于指定起始页码的参数。它将作为 queryFn 的 pageParam 参数传入第一页;后续每一页则使用 getNextPageParam 或 getPreviousPageParam 返回的值。该参数仅在查询尚无页时生效:一旦存在第一页,重新拉取将从该页自身的参数开始。
maxPages? number undefined 无限查询的数据中最多存储的页数。
meta? Record<string, unknown> undefined 存储于每个查询上的额外负载。可利用该属性传递可在其他位置使用的附加信息。
networkMode? "online" | "always" | "offlineFirst" 'online' 控制查询是否允许基于当前网络连接状况运行。参见 网络模式 获取更多信息。
notifyOnChangeProps? | ( | "error" | "data" | "isError" | "isPending" | "isLoading" | "isLoadingError" | "isRefetchError" | "isSuccess" | "isPlaceholderData" | "status" | "dataUpdatedAt" | "errorUpdatedAt" | "failureCount" | "failureReason" | "errorUpdateCount" | "isFetched" | "isFetchedAfterMount" | "isFetching" | "isInitialLoading" | "isPaused" | "isRefetching" | "isStale" | "isEnabled" | "refetch" | "fetchStatus" | "fetchNextPage" | "fetchPreviousPage" | "hasNextPage" | "hasPreviousPage" | "isFetchNextPageError" | "isFetchingNextPage" | "isFetchPreviousPageError" | "isFetchingPreviousPage")[] | "all" | (() => | "all" | ( | "error" | "data" | "isError" | "isPending" | "isLoading" | "isLoadingError" | "isRefetchError" | "isSuccess" | "isPlaceholderData" | "status" | "dataUpdatedAt" | "errorUpdatedAt" | "failureCount" | "failureReason" | "errorUpdateCount" | "isFetched" | "isFetchedAfterMount" | "isFetching" | "isInitialLoading" | "isPaused" | "isRefetching" | "isStale" | "isEnabled" | "refetch" | "fetchStatus" | "fetchNextPage" | "fetchPreviousPage" | "hasNextPage" | "hasPreviousPage" | "isFetchNextPageError" | "isFetchingNextPage" | "isFetchPreviousPageError" | "isFetchingPreviousPage")[] | undefined) undefined 若设置该选项,组件仅在所列属性发生变更时重新渲染。设为 ['data', 'error'] 时,组件仅在 data 或 error 属性变更时重新渲染。设为 'all' 时,组件将在任意查询更新时重新渲染。设为函数时,该函数将被执行以计算属性列表。默认值为 undefined,此时会自动追踪属性访问,组件仅在任一被追踪属性变更时重新渲染。
persister? (queryFn: (context: QueryFunctionContext<NoInfer<TQueryKey>, TPageParam>) => TQueryFnData | Promise<TQueryFnData>, context: object, query: Query) => TQueryFnData | Promise<TQueryFnData> undefined 此选项可用于将查询结果持久化到外部存储,从而绕过实际调用 queryFn 的需要。适用于跨服务端/客户端边界持久化查询数据等场景。
placeholderData? | InfiniteData<TQueryFnData, TPageParam> | ((previousData: | InfiniteData<TQueryFnData, TPageParam> | undefined, previousQuery: | Query<InfiniteData<TQueryFnData, TPageParam>, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey> | undefined) => | InfiniteData<TQueryFnData, TPageParam> | undefined) undefined 若设置该值,它将作为该特定查询观察者在查询仍处于 loading 数据状态且未提供 initialData 时的占位数据。
queryFn? | typeof skipToken | ((context: QueryFunctionContext<TQueryKey, TPageParam>) => TQueryFnData | Promise<TQueryFnData>) undefined 查询用于请求数据的函数。必需,除非已通过 queryClient.setQueryDefaults 或 queryClient.setDefaultOptions 设置了默认查询函数。接收一个 QueryFunctionContext。必须返回一个 Promise,该 Promise 要么解析出数据,要么抛出错误。数据不能为 undefined。
queryHash? string undefined queryKey 的哈希形式,使用 queryKeyHashFn(或默认哈希函数)计算得出。该哈希值将作为内部实际缓存键使用。
queryKey TQueryKey & object undefined 该查询所用的查询键。查询键将被哈希为稳定哈希值。详见 查询键。只要 enabled 未设为 false,该键变更时查询将自动更新。
queryKeyHashFn? (queryKey: TQueryKey) => string undefined 若指定该函数,则使用它对 queryKey 进行哈希运算以生成字符串。
refetchInterval? | number | false | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => number | false | undefined) false 若设为数字,查询将以该毫秒频率持续重新拉取。若设为函数,该函数将使用最新数据和查询来计算频率。
refetchIntervalInBackground? boolean false 若设为 true,查询将在标签页/窗口处于后台时继续重新拉取。
refetchOnMount? | boolean | "always" | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => boolean | "always") true 若设为 true,查询将在挂载时重新拉取(若数据已过期)。若设为 false,将禁用额外查询实例触发后台重新拉取。若设为 'always',查询将在挂载时始终重新拉取(除非使用了 staleTime: 'static')。若设为函数,该函数将使用最新数据和查询来计算该值。
refetchOnReconnect? | boolean | "always" | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => boolean | "always") undefined 若设为 true,查询将在重新连接网络时重新拉取(若数据已过期)。若设为 false,查询将不在重新连接时重新拉取。若设为 'always',查询将在重新连接时始终重新拉取(除非使用了 staleTime: 'static')。若设为函数,该函数将使用最新数据和查询来计算该值。默认值为 true,除非 networkMode 为 'always'。
refetchOnWindowFocus? | boolean | "always" | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => boolean | "always") true 若设为 true,查询将在窗口获得焦点时重新拉取(若数据已过期)。若设为 false,查询将不在窗口获得焦点时重新拉取。若设为 'always',查询将在窗口获得焦点时始终重新拉取(除非使用了 staleTime: 'static')。若设为函数,该函数将使用最新数据和查询来计算该值。
retry? | number | false | true | ((failureCount: number, error: TError) => boolean) undefined 若为 false,失败的查询默认不重试。若为 true,失败的查询将无限重试。若设为整数(例如 3),失败的查询将重试直至失败次数达到该数值。若设为函数 (failureCount, error) => boolean,失败的查询将重试直至该函数返回 false。客户端默认为 3,服务端默认为 0。
retryDelay? number | ((failureCount: number, error: TError) => number) undefined 该函数接收一个 retryAttempt 整数和实际错误,并返回下次尝试前应延迟的毫秒数。类似 attempt => Math.min(attempt > 1 ? 2 ** attempt * 1000 : 1000, 30 * 1000) 的函数应用指数退避策略;类似 attempt => attempt * 1000 的函数应用线性退避策略。默认函数应用指数退避策略,上限为 30 秒。
retryOnMount? | false | true | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => boolean) true 若设为 false,包含错误的查询在挂载时将不会重试。若设为函数,该函数将使用查询来计算该值。
select? (data: InfiniteData) => TData undefined 此选项可用于转换或选取查询函数返回数据的一部分。它会影响返回的 data 值,但不影响存储于查询缓存中的内容。select 函数仅在 data 发生变更,或 select 函数自身引用发生变更时执行。为优化性能,请对函数进行记忆化处理,使其引用在多次调用中保持稳定。
staleTime? | number | "static" | ((query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => number | "static") 0 数据被视为过期的毫秒数。若设为 Infinity,数据将永不被视为过期。若设为 'static',数据将永不被视为过期。若设为函数,该函数将使用查询来计算 staleTime。
structuralSharing? boolean | ((oldData: unknown, newData: unknown) => unknown) true 设为 false 可禁用查询结果之间的结构共享。设为函数时,该函数接收旧数据和新数据,并返回相同类型的已解析数据,以实现自定义结构共享逻辑。
subscribed? boolean true 设为 false 可取消该观察者对查询缓存更新的订阅。
throwOnError? | false | true | ((error: TError, query: Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>) => boolean) false 是否应抛出错误而非设置 error 属性。若设为 true 或 suspense 为 true,所有错误都将抛出至错误边界。若设为 false 且 suspense 也为 false,错误将作为状态返回。若设为函数,该函数将接收错误和查询,并应返回一个布尔值,指示是否应在错误边界中显示错误(true)或作为状态返回错误(false)。

queryClient?

QueryClient

使用此选项可指定自定义的 QueryClient。否则,将使用离当前组件最近的上下文中的 QueryClient。

返回值

UseInfiniteQueryResult<TData, TError>

返回与 useQuery 相同的属性,并额外包含 fetchNextPage、fetchPreviousPage、hasNextPage、hasPreviousPage、isFetchingNextPage 和 isFetchingPreviousPage。只要 select 未将 TData 修改为偏离其默认的 InfiniteData<TQueryFnData> 形状,还会额外添加 data.pages 和 data.pageParams。

返回结果属性

属性 类型 描述
data TData | undefined 查询最后一次成功解析的数据。
dataUpdatedAt number 查询最近一次返回 status 状态为 "success" 的时间戳。
error TError | null 查询出错时的错误对象。— 默认为 null。
errorUpdateCount number 所有错误次数的总和。
errorUpdatedAt number 查询最近一次返回 status 状态为 "error" 的时间戳。
failureCount number 查询失败次数。— 每次查询失败时递增。— 查询成功时重置为 0。
failureReason TError | null 查询重试失败的原因。— 查询成功时重置为 null。
fetchNextPage (options?: FetchNextPageOptions) => Promise<InfiniteQueryObserverResult<TData, TError>> 此函数用于拉取下一页结果。
fetchPreviousPage (options?: FetchPreviousPageOptions) => Promise<InfiniteQueryObserverResult<TData, TError>> 此函数用于拉取上一页结果。
fetchStatus "fetching" | "paused" | "idle" 查询的拉取状态。— fetching:当 queryFn 正在执行时为 true,包括初始 pending 和后台重新拉取。— paused:查询本应拉取,但已被 paused。— idle:查询未处于拉取中。— 更多信息请参阅 网络模式。
hasNextPage boolean 若存在下一页(通过 getNextPageParam 选项判定),则为 true。
hasPreviousPage boolean 若存在上一页(通过 getPreviousPageParam 选项判定),则为 true。
isEnabled boolean 若该观察者已启用,则为 true;否则为 false。
isError boolean 基于 status 变量派生的布尔值,仅为方便使用。— 若查询尝试发生错误,则为 true。
isFetched boolean 若查询已完成拉取,则为 true。
isFetchedAfterMount boolean 若查询在组件挂载后完成拉取,则为 true。— 此属性可用于避免显示任何先前缓存的数据。
isFetching boolean 基于 fetchStatus 变量派生的布尔值,仅为方便使用。— 当 queryFn 正在执行时(包括初始 pending 和后台重新拉取)为 true。
isFetchingNextPage boolean 在使用 fetchNextPage 拉取下一页时为 true。
isFetchingPreviousPage boolean 在使用 fetchPreviousPage 拉取上一页时为 true。
isFetchNextPageError boolean 若拉取下一页时查询失败,则为 true。
isFetchPreviousPageError boolean 若拉取上一页时查询失败,则为 true。
isInitialLoading boolean 已弃用 isInitialLoading 已被 isLoading 取代,将在下一个主版本中移除。
isLoading boolean 查询首次拉取正在进行中时为 true。— 与 isFetching && isPending 含义相同。
isLoadingError boolean 若查询首次拉取失败,则为 true。
isPaused boolean 基于 fetchStatus 变量派生的布尔值,仅为方便使用。— 查询本应拉取,但已被 paused。
isPending boolean 若尚无缓存数据且尚未完成任何查询尝试,则为 pending。
isPlaceholderData boolean 若当前显示的数据为占位数据,则为 true。
isRefetchError boolean 若重新拉取时查询失败,则为 true。
isRefetching boolean 后台重新拉取正在进行中时为 true(不包括 初始 pending)。— 与 isFetching && !isPending 含义相同。
isStale boolean 若缓存中的数据已被使失效,或数据比给定的 staleTime 更旧,则为 true。
isSuccess boolean 基于 status 变量派生的布尔值,仅为方便使用。— 若查询已收到无错误响应且可安全展示其数据,则为 true。
refetch (options?: RefetchOptions) => Promise<QueryObserverResult<TData, TError>> 手动重新拉取查询的函数。
status "error" | "pending" | "success" 查询的状态。— 可能为:— pending:若尚无缓存数据且尚未完成任何查询尝试。— error:若查询尝试发生错误。— success:若查询已收到无错误响应且可安全展示其数据。

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

译自上游 59d11de