InfiniteQueryObserver
定义于:packages/query-core/src/infiniteQueryObserver.ts:40
一个 InfiniteQueryObserver,它继承自 QueryObserver,用于观察和切换无限查询。它在基础 QueryObserverResult 上扩展了无限查询专属的字段与方法(例如 hasNextPage 和 fetchNextPage),是框架适配器(如 useInfiniteQuery)构建其 Hook 所依赖的底层原语。
示例
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))继承自
QueryObserver<TQueryFnData,TError,TData,InfiniteData<TQueryFnData,TPageParam>,TQueryKey>
类型参数
TQueryFnData
TQueryFnData = unknown
TError
TError = DefaultError
TData
TData = InfiniteData<TQueryFnData>
TQueryKey
TQueryKey extends QueryKey = QueryKey
TPageParam
TPageParam = unknown
构造函数
构造函数
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>
覆盖
属性
getCurrentResult
1getCurrentResult: ReplaceReturnType<() => QueryObserverResult<TData, TError>, InfiniteQueryObserverResult<TData, TError>>;定义于:packages/query-core/src/infiniteQueryObserver.ts:59
返回被观察查询最近一次计算出的 QueryObserverResult。这是一个瞬时读取操作;若需在更新发生时实时获知,请改为订阅该观察者(使用其继承而来的 subscribe 方法)。
返回值
该观察者最新的结果。
示例
1const result = observer.getCurrentResult()2console.log(result.status, result.data)覆盖
1QueryObserver.getCurrentResultoptions
1options: QueryObserverOptions<TQueryFnData, TError, TData, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>;定义于:packages/query-core/src/queryObserver.ts:88
继承自
subscribe
1subscribe: (listener: InfiniteQueryObserverListener) => () => void;定义于:packages/query-core/src/infiniteQueryObserver.ts:54
注册一个监听器,使其在该对象通知每次更新时被调用。返回一个用于移除该监听器的函数——调用它即可停止监听。基类自身永远不会主动丢弃监听器,但某些子类会在 destroy() 中清空全部监听器。
参数
listener
InfiniteQueryObserverListener
每次更新时被调用,传入的参数由子类决定(即子类向其订阅者传递的内容)。
返回值
一个用于移除监听器的函数。
() => void
示例
1const unsubscribe = subscribable.subscribe(() => {2 // react to the update3})4 5unsubscribe()覆盖
1QueryObserver.subscribe方法
destroy()
1destroy(): void;定义位置:packages/query-core/src/queryObserver.ts:166
停止观察当前查询:清除所有监听器、取消过期和重新拉取间隔定时器,并将该观察者从其所观察的查询中移除。
返回值
void
继承自
fetchNextPage()
1fetchNextPage(options?: FetchNextPageOptions): Promise<InfiniteQueryObserverResult<TData, TError>>;定义位置:packages/query-core/src/infiniteQueryObserver.ts:165
拉取无限查询的下一页,并返回一个 Promise,该 Promise 在拉取成功后解析为 InfiniteQueryObserverResult。用于拉取的页码参数由 getNextPageParam 决定,该函数接收当前页数据/页码参数,并且其返回值也决定了 hasNextPage。
参数
options?
将 cancelRefetch 设为 false 可在拉取进行中时忽略本次调用;将 throwOnError 设为 true 可在拉取失败时使 Promise 拒绝。
返回值
Promise<InfiniteQueryObserverResult<TData, TError>>
一个 Promise,当拉取完下一页后解析为对应结果。启用 cancelRefetch: false 时,会复用正在运行的拉取任务,因此下一页可能不会被实际拉取。
参见
InfiniteQueryObserver#fetchPreviousPage
示例
1const { hasNextPage } = observer.getCurrentResult()2 3if (hasNextPage) {4 await observer.fetchNextPage()5}fetchOptimistic()
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,解析为该次拉取的结果。
示例
1const result = await observer.fetchOptimistic({2 queryKey: ['posts', 2],3 queryFn: () => fetchPost(2),4})5console.log(result.data)继承自
fetchPreviousPage()
1fetchPreviousPage(options?: FetchPreviousPageOptions): Promise<InfiniteQueryObserverResult<TData, TError>>;定义位置:packages/query-core/src/infiniteQueryObserver.ts:196
拉取无限查询的上一页,并返回一个 Promise,该 Promise 在拉取成功后解析为 InfiniteQueryObserverResult。用于拉取的页码参数由 getPreviousPageParam 决定,该函数接收当前页数据/页码参数,并且其返回值也决定了 hasPreviousPage。
参数
options?
将 cancelRefetch 设为 false 可在拉取进行中时忽略本次调用;将 throwOnError 设为 true 可在拉取失败时使 Promise 拒绝。
返回值
Promise<InfiniteQueryObserverResult<TData, TError>>
一个 Promise,当拉取完上一页后解析为对应结果。启用 cancelRefetch: false 时,会复用正在运行的拉取任务,因此上一页可能不会被实际拉取。
参见
InfiniteQueryObserver#fetchNextPage
示例
1const { hasPreviousPage } = observer.getCurrentResult()2 3if (hasPreviousPage) {4 await observer.fetchPreviousPage()5}getCurrentQuery()
1getCurrentQuery(): Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>;定义位置:packages/query-core/src/queryObserver.ts:371
返回本观察者当前正在观察的 Query 实例。
返回值
Query<TQueryFnData, TError, InfiniteData<TQueryFnData, TPageParam>, TQueryKey>
被观察的查询。
继承自
getOptimisticResult()
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()
1hasListeners(): boolean;定义位置:packages/query-core/src/subscribable.ts:43
至少有一个监听器注册时返回 true,全部取消订阅后返回 false。
返回值
boolean
至少有一个监听器注册时返回 true。
继承自
refetch()
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,当重新拉取完成后解析为对应结果。
示例
1const result = await observer.refetch({ cancelRefetch: false })2console.log(result.data)继承自
setOptions()
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
重写自
shouldFetchOnReconnect()
1shouldFetchOnReconnect(): boolean;定义位置:packages/query-core/src/queryObserver.ts:139
返回被观察查询当前是否处于过期状态,以及是否已通过 refetchOnReconnect 选项配置为在网络重连时重新拉取。
返回值
boolean
若观察者应在重连时重新拉取查询,则返回 true。
继承自
QueryObserver.shouldFetchOnReconnect
shouldFetchOnWindowFocus()
1shouldFetchOnWindowFocus(): boolean;定义位置:packages/query-core/src/queryObserver.ts:153
返回被观察查询当前是否处于过期状态,以及是否已通过 refetchOnWindowFocus 选项配置为在窗口获得焦点时重新拉取。
返回值
boolean
若观察者应在窗口获得焦点时重新拉取查询,则返回 true。
继承自
QueryObserver.shouldFetchOnWindowFocus
trackProp()
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
继承自
trackResult()
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 代理对象。
继承自
updateResult()
1updateResult(): void;定义位置:packages/query-core/src/queryObserver.ts:765
根据当前查询/选项重新计算并存储当前结果,并在结果变化时通知监听器。框架适配器在完成订阅后立即调用此方法,以确保不会遗漏创建观察者与订阅之间发生的任何查询更新。
返回值
void