Skip to content

createMutation

import { createMutation } from '@effector-tanstack-query/core'
// Uses the default $queryClient.
function createMutation<
TData = unknown,
TError = Error,
TVariables = void,
TOnMutateResult = unknown,
>(
options: CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,
): MutationResult<TData, TError, TVariables>
// Explicit client.
function createMutation<
TData = unknown,
TError = Error,
TVariables = void,
TOnMutateResult = unknown,
>(
queryClient: QueryClient,
options: CreateMutationOptions<TData, TError, TVariables, TOnMutateResult>,
): MutationResult<TData, TError, TVariables>

Options

CreateMutationOptions extends MutationObserverOptions from @tanstack/query-core:

FieldTypeNotes
mutationFn(vars: TVariables) => Promise<TData>Required (or via setMutationDefaults)
mutationKeyunknown[]For setMutationDefaults lookups
onMutate(vars) => TOnMutateResult | Promise<…>Runs before mutationFn; returns context
onSuccess(data, vars, context, ctx)Observer-level; per-call via mutateWith
onError(error, vars, context, ctx)Observer-level
onSettled(data, error, vars, context, ctx)Observer-level
retryboolean | number | RetryFnSame as TanStack Query
networkMode'online' | 'always' | 'offlineFirst'Same as TanStack Query
metaRecord<string, unknown>Forwarded to MutationCache callbacks
namestring (recommended)Stable name for SID-based SSR

Return value (MutationResult<TData, TError, TVariables>)

FieldTypeDescription
$dataStore<TData | undefined>Mutation result
$errorStore<TError | null>Last error
$statusStore<'idle' | 'pending' | 'success' | 'error'>Mutation status
$variablesStore<TVariables | undefined>Last mutate args
$isPausedStore<boolean>Paused (e.g. offline)
$isPendingStore<boolean>Mutation running
$isSuccessStore<boolean>Succeeded
$isErrorStore<boolean>Failed
$isIdleStore<boolean>Not triggered
mutateEventCallable<TVariables>Trigger mutation
mutateWithEventCallable<{ variables; onSuccess?; onError?; onSettled? }>Trigger with per-call callbacks
resetEventCallable<void>Reset to idle
startEventCallable<void>Subscribe observer
unmountedEventCallable<void>Unsubscribe (allows gcTime cleanup)
finished{ success: Event<{ params; result }>; failure: Event<{ params; error }> }Sample-friendly outcome events
$observerStore<MutationObserver | null>Per-scope observer (created on start())
$queryClientStore<QueryClient | null>Resolved client for this mutation

finished events

Fire once per terminal transition (pending → success/error). Do not fire on reset().

sample({
clock: addTodo.finished.success,
fn: ({ params, result }) => result.id,
target: focusNewlyCreatedItem,
})

Lifecycle

start() subscribes the observer. unmounted() unsubscribes — required for gcTime to release the mutation entry from the MutationCache. The useMutation hook handles both.