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

MutationObserver

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

定义于:packages/query-core/src/mutationObserver.ts:37

观察单个修改,并从中派生出一个 MutationObserverResult。
类似 useMutation 的框架 Hook 会为每次 Hook 调用创建一个 MutationObserver,在重新渲染期间保持其稳定性,在传入 Hook 的选项发生变化时调用 setOptions,订阅它以在更新时重新渲染,并读取 getCurrentResult() 以返回对应值。调用 mutate() 会在 MutationCache 中构建一个新的底层 Mutation 并执行它。

示例

TypeScript
1const observer = new MutationObserver(queryClient, {2  mutationFn: (variables: { title: string }) => addPost(variables),3})

继承自

  • Subscribable<MutationObserverListener<TData, TError, TVariables, TOnMutateResult>>

类型参数

TData

TData = unknown

TError

TError = DefaultError

TVariables

TVariables = void

TOnMutateResult

TOnMutateResult = unknown

构造函数

构造函数

TypeScript
1new MutationObserver<TData = unknown, TError = Error, TVariables = void, TOnMutateResult = unknown>(client: QueryClient, options: MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>): MutationObserver<TData, TError, TVariables, TOnMutateResult>;

定义于:packages/query-core/src/mutationObserver.ts:57

参数

client

QueryClient

options

MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>

返回值

MutationObserver<TData, TError, TVariables, TOnMutateResult>

覆盖

TypeScript
1Subscribable<2  MutationObserverListener<TData, TError, TVariables, TOnMutateResult>3>.constructor

属性

options

TypeScript
1options: MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>;

定义于:packages/query-core/src/mutationObserver.ts:45

方法

getCurrentResult()

TypeScript
1getCurrentResult(): MutationObserverResult<TData, TError, TVariables, TOnMutateResult>;

定义于:packages/query-core/src/mutationObserver.ts:165

返回观察者当前的结果,该结果派生自所观察修改的状态(若尚未构建任何修改,则返回默认的 idle 状态,例如首次调用 mutate() 之前或调用 reset() 之后)。

返回值

MutationObserverResult<TData, TError, TVariables, TOnMutateResult>

观察者的最新结果。


hasListeners()

TypeScript
1hasListeners(): boolean;

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

当至少有一个监听器已注册时返回 true;所有监听器均取消订阅后返回 false。

返回值

boolean

若至少有一个监听器已注册,则返回 true。

继承自

TypeScript
1Subscribable.hasListeners

mutate()

TypeScript
1mutate(variables: TVariables, options?: MutateOptions<TData, TError, TVariables, TOnMutateResult>): Promise<TData>;

定义于:packages/query-core/src/mutationObserver.ts:217

使用观察者当前的选项在 MutationCache 中构建一个新的 Mutation,将此观察者从此前观察的修改中分离,并将其附加到新修改上,然后使用给定变量执行该修改。

可选的按次调用 options(onSuccess/onError/onSettled)将在修改最终完成时被调用,此外还会调用观察者自身选项中定义的任意回调函数。

参数

variables

TVariables

传递给 mutationFn 的变量。

options?

MutateOptions<TData, TError, TVariables, TOnMutateResult>

按次调用的 onSuccess、onError 和 onSettled 回调函数。

返回值

Promise<TData>

一个 Promise,成功时解析为修改的数据,失败时拒绝并抛出其错误。

示例

TypeScript
1await observer.mutate(2  { title: 'New post' },3  { onSuccess: (data) => console.log(data) },4)

reset()

TypeScript
1reset(): void;

定义于:packages/query-core/src/mutationObserver.ts:188

将观察者从其当前正在观察的修改(如果存在)中分离,并将所观察结果重置为其默认的 idle 状态。

这不会取消正在进行中的修改;该修改本身仍会继续运行直至完成,其自身的回调函数也仍会触发,但此观察者将停止反映其状态,后续的 mutate() 调用将构建一个全新的修改。

返回值

void

参见

MutationObserver#mutate

示例

TypeScript
1observer.reset()

setOptions()

TypeScript
1setOptions(options: MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>): void;

定义于:packages/query-core/src/mutationObserver.ts:100

更新观察者的选项。

如果新 mutationKey 与前一个不同(且两者均已定义),则观察者会被重置,即从其此前观察的修改中分离。否则,若当前所观察的修改仍是 pending,其选项也会就地更新。

参数

options

MutationObserverOptions<TData, TError, TVariables, TOnMutateResult>

新的修改观察者选项。在应用前,它们会先通过 QueryClient#defaultMutationOptions 进行默认值填充。

返回值

void

示例

TypeScript
1observer.setOptions({2  mutationFn: (variables: { title: string }) => addPost(variables),3  onSuccess: (data) => console.log(data),4})

subscribe()

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

定义于:packages/query-core/src/subscribable.ts:28

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

参数

listener

MutationObserverListener

每次更新时被调用,参数为子类传递给其订阅者的任意值。

返回值

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

() => void

示例

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

继承自

TypeScript
1Subscribable.subscribe

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

译自上游 59d11de