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

InfiniteQueryObserver

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

定义于:packages/query-core/src/infiniteQueryObserver.ts:40

一个 InfiniteQueryObserver,它继承自 QueryObserver,用于观察和切换无限查询。它在基础 QueryObserverResult 上扩展了无限查询专属的字段与方法(例如 hasNextPage 和 fetchNextPage),是框架适配器(如 useInfiniteQuery)构建其 Hook 所依赖的底层原语。

示例

TypeScript
1const observer = new InfiniteQueryObserver(queryClient, {2  queryKey: ['projects'],3  queryFn: ({ pageParam }) => fetchProjects(pageParam),4  initialPageParam: 0,5  getNextPageParam: (lastPage) => lastPage.nextCursor,6})7 8const unsubscribe = observer.subscribe((result) => console.log(result))

继承自

类型参数

TQueryFnData

TQueryFnData = unknown

TError

TError = DefaultError

TData

TData = InfiniteData<TQueryFnData>

TQueryKey

TQueryKey extends QueryKey = QueryKey

TPageParam

TPageParam = unknown

构造函数

构造函数

TypeScript
1new InfiniteQueryObserver<TQueryFnData = unknown, TError = Error, TData = InfiniteData<TQueryFnData, unknown>, TQueryKey extends readonly unknown[] = readonly unknown[], TPageParam = unknown>(client: QueryClient, options: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): InfiniteQueryObserver<TQueryFnData, TError, TData, TQueryKey, TPageParam>;

定义于:packages/query-core/src/infiniteQueryObserver.ts:82

参数

client

QueryClient

options

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

返回值

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

覆盖

QueryObserver.constructor

属性

getCurrentResult

TypeScript
1getCurrentResult: ReplaceReturnType<() => QueryObserverResult<TData, TError>, InfiniteQueryObserverResult<TData, TError>>;

定义于:packages/query-core/src/infiniteQueryObserver.ts:59

返回被观察查询最近一次计算出的 QueryObserverResult。这是一个瞬时读取操作;若需在更新发生时实时获知,请改为订阅该观察者(使用其继承而来的 subscribe 方法)。

返回值

该观察者最新的结果。

示例

TypeScript
1const result = observer.getCurrentResult()2console.log(result.status, result.data)

覆盖

TypeScript
1QueryObserver.getCurrentResult

options

TypeScript
1options: QueryObserverOptions<TQueryFnData, TError, TData, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>;

定义于:packages/query-core/src/queryObserver.ts:88

继承自

QueryObserver.options


subscribe

TypeScript
1subscribe: (listener: InfiniteQueryObserverListener) => () => void;

定义于:packages/query-core/src/infiniteQueryObserver.ts:54

注册一个监听器,使其在该对象通知每次更新时被调用。返回一个用于移除该监听器的函数——调用它即可停止监听。基类自身永远不会主动丢弃监听器,但某些子类会在 destroy() 中清空全部监听器。

参数

listener

InfiniteQueryObserverListener

每次更新时被调用,传入的参数由子类决定(即子类向其订阅者传递的内容)。

返回值

一个用于移除监听器的函数。

() => void

示例

TypeScript
1const unsubscribe = subscribable.subscribe(() => {2  // react to the update3})4 5unsubscribe()

覆盖

TypeScript
1QueryObserver.subscribe

方法

destroy()

TypeScript
1destroy(): void;

定义位置:packages/query-core/src/queryObserver.ts:166

停止观察当前查询:清除所有监听器、取消过期和重新拉取间隔定时器,并将该观察者从其所观察的查询中移除。

返回值

void

继承自

QueryObserver.destroy


fetchNextPage()

TypeScript
1fetchNextPage(options?: FetchNextPageOptions): Promise<InfiniteQueryObserverResult<TData, TError>>;

定义位置:packages/query-core/src/infiniteQueryObserver.ts:165

拉取无限查询的下一页,并返回一个 Promise,该 Promise 在拉取成功后解析为 InfiniteQueryObserverResult。用于拉取的页码参数由 getNextPageParam 决定,该函数接收当前页数据/页码参数,并且其返回值也决定了 hasNextPage。

参数

options?

FetchNextPageOptions

将 cancelRefetch 设为 false 可在拉取进行中时忽略本次调用;将 throwOnError 设为 true 可在拉取失败时使 Promise 拒绝。

返回值

Promise<InfiniteQueryObserverResult<TData, TError>>

一个 Promise,当拉取完下一页后解析为对应结果。启用 cancelRefetch: false 时,会复用正在运行的拉取任务,因此下一页可能不会被实际拉取。

参见

InfiniteQueryObserver#fetchPreviousPage

示例

TypeScript
1const { hasNextPage } = observer.getCurrentResult()2 3if (hasNextPage) {4  await observer.fetchNextPage()5}

fetchOptimistic()

TypeScript
1fetchOptimistic(options: QueryObserverOptions<TQueryFnData, TError, TData, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>): Promise<QueryObserverResult<TData, TError>>;

定义位置:packages/query-core/src/queryObserver.ts:412

使用给定选项拉取一个查询,但不影响本观察者自身所跟踪的查询或结果,并返回一个 Promise,该 Promise 解析为该次拉取的 QueryObserverResult。这适用于预先拉取另一观察者(例如即将导航到的查询)所需的数据。

参数

options

QueryObserverOptions<TQueryFnData, TError, TData, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>

待拉取查询的观察者选项。

返回值

Promise<QueryObserverResult<TData, TError>>

一个 Promise,解析为该次拉取的结果。

示例

TypeScript
1const result = await observer.fetchOptimistic({2  queryKey: ['posts', 2],3  queryFn: () => fetchPost(2),4})5console.log(result.data)

继承自

QueryObserver.fetchOptimistic


fetchPreviousPage()

TypeScript
1fetchPreviousPage(options?: FetchPreviousPageOptions): Promise<InfiniteQueryObserverResult<TData, TError>>;

定义位置:packages/query-core/src/infiniteQueryObserver.ts:196

拉取无限查询的上一页,并返回一个 Promise,该 Promise 在拉取成功后解析为 InfiniteQueryObserverResult。用于拉取的页码参数由 getPreviousPageParam 决定,该函数接收当前页数据/页码参数,并且其返回值也决定了 hasPreviousPage。

参数

options?

FetchPreviousPageOptions

将 cancelRefetch 设为 false 可在拉取进行中时忽略本次调用;将 throwOnError 设为 true 可在拉取失败时使 Promise 拒绝。

返回值

Promise<InfiniteQueryObserverResult<TData, TError>>

一个 Promise,当拉取完上一页后解析为对应结果。启用 cancelRefetch: false 时,会复用正在运行的拉取任务,因此上一页可能不会被实际拉取。

参见

InfiniteQueryObserver#fetchNextPage

示例

TypeScript
1const { hasPreviousPage } = observer.getCurrentResult()2 3if (hasPreviousPage) {4  await observer.fetchPreviousPage()5}

getCurrentQuery()

TypeScript
1getCurrentQuery(): Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>;

定义位置:packages/query-core/src/queryObserver.ts:371

返回本观察者当前正在观察的 Query 实例。

返回值

Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>

被观察的查询。

继承自

QueryObserver.getCurrentQuery


getOptimisticResult()

TypeScript
1getOptimisticResult(options: DefaultedInfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): InfiniteQueryObserverResult<TData, TError>;

定义位置:packages/query-core/src/infiniteQueryObserver.ts:129

QueryObserver#getOptimisticResult 的无限查询对应方法,在委托给基类前将选项标记为无限查询。由框架适配器(如 useInfiniteQuery)在订阅前调用,以同步计算当前 InfiniteQueryObserverResult。

参数

options

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

用于计算结果的已默认化的无限查询观察者选项。

返回值

InfiniteQueryObserverResult<TData, TError>

给定选项对应的结果。

重写自

QueryObserver.getOptimisticResult


hasListeners()

TypeScript
1hasListeners(): boolean;

定义位置:packages/query-core/src/subscribable.ts:43

至少有一个监听器注册时返回 true,全部取消订阅后返回 false。

返回值

boolean

至少有一个监听器注册时返回 true。

继承自

QueryObserver.hasListeners


refetch()

TypeScript
1refetch(options?: RefetchOptions): Promise<QueryObserverResult<TData, TError>>;

定义位置:packages/query-core/src/queryObserver.ts:387

重新拉取被观察的查询,并返回一个 Promise,该 Promise 解析为重新拉取后的 QueryObserverResult。

参数

options?

RefetchOptions = {}

将 cancelRefetch 设为 false 可保留正在运行的拉取任务而非取消它;将 throwOnError 设为 true 可在重新拉取失败时使 Promise 拒绝。

返回值

Promise<QueryObserverResult<TData, TError>>

一个 Promise,当重新拉取完成后解析为对应结果。

示例

TypeScript
1const result = await observer.refetch({ cancelRefetch: false })2console.log(result.data)

继承自

QueryObserver.refetch


setOptions()

TypeScript
1setOptions(options: InfiniteQueryObserverOptions<TQueryFnData, TError, TData, TQueryKey, TPageParam>): void;

定义位置:packages/query-core/src/infiniteQueryObserver.ts:108

更新观察者的选项。行为与 QueryObserver.setOptions 相同,额外在委托给基类实现前将选项标记为属于无限查询。

参数

options

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

新的无限查询观察者选项。

返回值

void

重写自

QueryObserver.setOptions


shouldFetchOnReconnect()

TypeScript
1shouldFetchOnReconnect(): boolean;

定义位置:packages/query-core/src/queryObserver.ts:139

返回被观察查询当前是否处于过期状态,以及是否已通过 refetchOnReconnect 选项配置为在网络重连时重新拉取。

返回值

boolean

若观察者应在重连时重新拉取查询,则返回 true。

继承自

QueryObserver.shouldFetchOnReconnect


shouldFetchOnWindowFocus()

TypeScript
1shouldFetchOnWindowFocus(): boolean;

定义位置:packages/query-core/src/queryObserver.ts:153

返回被观察查询当前是否处于过期状态,以及是否已通过 refetchOnWindowFocus 选项配置为在窗口获得焦点时重新拉取。

返回值

boolean

若观察者应在窗口获得焦点时重新拉取查询,则返回 true。

继承自

QueryObserver.shouldFetchOnWindowFocus


trackProp()

TypeScript
1trackProp(key: 2  | "error"3  | "data"4  | "isError"5  | "isPending"6  | "isLoading"7  | "isLoadingError"8  | "isRefetchError"9  | "isSuccess"10  | "isPlaceholderData"11  | "status"12  | "dataUpdatedAt"13  | "errorUpdatedAt"14  | "failureCount"15  | "failureReason"16  | "errorUpdateCount"17  | "isFetched"18  | "isFetchedAfterMount"19  | "isFetching"20  | "isInitialLoading"21  | "isPaused"22  | "isRefetching"23  | "isStale"24  | "isEnabled"25  | "refetch"26  | "fetchStatus"): void;

定义位置:packages/query-core/src/queryObserver.ts:363

记录指定 QueryObserverResult 属性已被读取,以便后续更新仅在被追踪属性实际发生变化时才通知本观察者。通常通过 QueryObserver#trackResult 的代理间接调用;直接暴露此方法供自行追踪属性访问的框架适配器(例如通过其自身的响应式系统)使用,而非依赖代理。

参数

key

| "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"

被读取的属性名称。

返回值

void

继承自

QueryObserver.trackProp


trackResult()

TypeScript
1trackResult(result: QueryObserverResult<TData, TError>, onPropTracked?: (key: 2  | "error"3  | "data"4  | "isError"5  | "isPending"6  | "isLoading"7  | "isLoadingError"8  | "isRefetchError"9  | "isSuccess"10  | "isPlaceholderData"11  | "status"12  | "dataUpdatedAt"13  | "errorUpdatedAt"14  | "failureCount"15  | "failureReason"16  | "errorUpdateCount"17  | "isFetched"18  | "isFetchedAfterMount"19  | "isFetching"20  | "isInitialLoading"21  | "isPaused"22  | "isRefetching"23  | "isStale"24  | "isEnabled"25  | "refetch"26| "fetchStatus") => void): QueryObserverResult<TData, TError>;

定义位置:packages/query-core/src/queryObserver.ts:343

将 QueryObserverResult 包裹在一个 Proxy 中,通过 QueryObserver#trackProp(及可选的 onPropTracked 回调)记录哪些属性被读取。当 notifyOnChangeProps 未设置时,框架适配器使用此方法实现其默认行为:“仅在你实际读取的属性发生变化时才重新渲染”。

参数

result

QueryObserverResult<TData, TError>

待包裹的结果。

onPropTracked?

(key: | "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") => void

每次读取属性时传入该属性名称并调用。

返回值

QueryObserverResult<TData, TError>

一个追踪属性读取行为的 result 代理对象。

继承自

QueryObserver.trackResult


updateResult()

TypeScript
1updateResult(): void;

定义位置:packages/query-core/src/queryObserver.ts:765

根据当前查询/选项重新计算并存储当前结果,并在结果变化时通知监听器。框架适配器在完成订阅后立即调用此方法,以确保不会遗漏创建观察者与订阅之间发生的任何查询更新。

返回值

void

继承自

QueryObserver.updateResult

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

译自上游 59d11de