useMutation
const {
data,
error,
isError,
isIdle,
isPending,
isPaused,
isSuccess,
failureCount,
failureReason,
mutate,
mutateAsync,
reset,
status,
submittedAt,
variables,
} = useMutation(
{
mutationFn,
gcTime,
meta,
mutationKey,
networkMode,
onError,
onMutate,
onSettled,
onSuccess,
retry,
retryDelay,
scope,
throwOnError,
},
queryClient,
)
mutate(variables, {
onError,
onSettled,
onSuccess,
})参数1 (选项)
mutationFn: (variables: TVariables, context: MutationFunctionContext) => Promise<TData>必需,但前提是未定义默认突变函数
一个执行异步任务并返回 Promise 的函数。
variables是一个对象,mutate会将其传递给你的mutationFn。context是一个对象,mutate会将其传递给你的mutationFn。包含对QueryClient、mutationKey和可选meta对象的引用。
gcTime: number | Infinity未使用/非活动的缓存数据在内存中保留的时间(以毫秒为单位)。当突变的缓存变为未使用或非活动状态时,该缓存数据将在经过此持续时间后被垃圾回收。当指定了不同的缓存时间时,将使用最长的时间。
如果设置为
Infinity,将禁用垃圾回收。注意:最大允许时间约为 24天,尽管可以使用 timeoutManager.setTimeoutProvider 来绕过此限制。
mutationKey: unknown[]可选
可以设置突变键以继承通过
queryClient.setMutationDefaults设置的默认值。
networkMode: 'online' | 'always' | 'offlineFirst'可选
默认值为
'online'更多信息请参见 网络模式。
onMutate: (variables: TVariables) => Promise<TOnMutateResult | void> | TOnMutateResult | void可选
此函数将在突变函数执行前触发,并接收与突变函数相同的变量。
用于在希望突变成功的情况下对资源进行乐观更新。
此函数返回的值将在突变失败时传递给
onError和onSettled函数,可用于回滚乐观更新。
onSuccess: (data: TData, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: MutationFunctionContext) => Promise<unknown> | unknown可选
当突变成功时,此函数将被触发,并接收突变的结果。
如果返回一个 Promise,它将在继续之前被等待和解析。
onError: (err: TError, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: MutationFunctionContext) => Promise<unknown> | unknown可选
如果突变遇到错误,此函数将被触发,并接收错误对象。
如果返回一个 Promise,它将在继续之前被等待和解析。
onSettled: (data: TData, error: TError, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: MutationFunctionContext) => Promise<unknown> | unknown可选
当突变成功获取或遇到错误时,此函数将被触发,并接收数据或错误。
如果返回一个 Promise,它将在继续之前被等待和解析。
retry: boolean | number | (failureCount: number, error: TError) => boolean默认值为
0。如果为
false,失败的突变将不会重试。如果为
true,失败的突变将无限重试。如果设置为
number,例如3,失败的突变将重试直到失败次数达到该数值。
retryDelay: number | (retryAttempt: number, error: TError) => number此函数接收一个
retryAttempt整数和实际的错误,并返回下次尝试前应用的延迟(以毫秒为单位)。类似
attempt => Math.min(attempt > 1 ? 2 ** attempt * 1000 : 1000, 30 * 1000)的函数应用指数退避。类似
attempt => attempt * 1000的函数应用线性退避。
scope: { id: string }可选
默认为唯一 ID(因此所有突变并行运行)
具有相同作用域 ID 的突变将按顺序串行运行。
throwOnError: undefined | boolean | (error: TError) => boolean设置为
true时,突变错误将在渲染阶段被抛出,并传播到最近的错误边界。设置为
false以禁用将错误抛出到错误边界的行为。如果设置为函数,它将接收错误并应返回一个布尔值,指示是否在错误边界中显示错误(
true)或将错误作为状态返回(false)。
meta: Record<string, unknown>可选
如果设置,将在突变缓存条目上存储可按需使用的附加信息。它将在
mutation可用的任何地方访问(例如MutationCache的onError、onSuccess函数)。
参数2 (QueryClient)
queryClient?: QueryClient使用此参数来使用自定义 QueryClient。否则,将使用最近上下文中的 QueryClient。
返回值
mutate: (variables: TVariables, { onSuccess, onSettled, onError }) => void你可以使用变量调用的突变函数来触发突变,并可选择附加回调选项。
variables: TVariables可选
要传递给
mutationFn的变量对象。
onSuccess: (data: TData, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: MutationFunctionContext) => void可选
当突变成功时,此函数将被触发,并接收突变的结果。
无返回值函数,返回值将被忽略。
onError: (err: TError, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: MutationFunctionContext) => void可选
如果突变遇到错误,此函数将被触发,并接收错误。
无返回值函数,返回值将被忽略。
onSettled: (data: TData | undefined, error: TError | null, variables: TVariables, onMutateResult: TOnMutateResult | undefined, context: MutationFunctionContext) => void可选
当突变成功获取或遇到错误时,此函数将被触发,并接收数据或错误。
无返回值函数,返回值将被忽略。
如果你发出多个请求,
onSuccess将仅在你发出的最后一次调用后触发。
mutateAsync: (variables: TVariables, { onSuccess, onSettled, onError }) => Promise<TData>与
mutate类似,但返回一个可等待的 Promise。
status: MutationStatus将是以下之一:
idle在突变函数执行前的初始状态。pending如果突变正在执行中。error如果上次突变尝试导致错误。success如果上次突变尝试成功。
isIdle,isPending,isSuccess,isError: 从status派生的布尔变量。isPaused: boolean如果突变已被“暂停”,则为
true。更多信息请参见 网络模式。
data: undefined | unknown默认为
undefined。突变最后一次成功解析的数据。
error: null | TError查询的错误对象,如果遇到错误。
reset: () => void一个清理突变内部状态的函数(即,将突变重置为其初始状态)。
failureCount: number突变的失败次数。
每次突变失败时递增。
突变成功时重置为
0。
failureReason: null | TError突变重试的失败原因。
突变成功时重置为
null。
submittedAt: number提交突变的时间戳。
默认为
0。
variables: undefined | TVariables传递给
mutationFn的variables对象。默认为
undefined。
最后更新于
这有帮助吗?