useMutation
useMutation
Example
import {useMutation} from 'blitz'import updateProject from 'app/projects/mutations/updateProject'function (props) { const [updateProjectMutation] = useMutation(updateProject) return ( <Formik onSubmit={async values => { try { const project = await updateProjectMutation(values) } catch (error) { alert('Error saving project') } }}> {/* ... */} </Formik> )}
For more examples and use cases, see the
API
const [ invoke, { status, isIdle, isLoading, isSuccess, isError, data, error, reset }] = useMutation(mutationResolver, { onMutate, onSuccess, onError, onSettled, throwOnError, useErrorBoundary,})const promise = invoke(inputArguments, { onSuccess, onSettled, onError, throwOnError,})
Arguments
mutationResolver:A Blitz mutation resolver- Required
options- Optional
Options
onMutate: Function(inputArguments) => Promise | snapshotValue- Optional
- This function will fire before the mutation function is fired and is passed the same variables the mutation function would receive
- Useful to perform optimistic updates to a resource in hopes that the mutation succeeds
- The value returned from this function will be passed to both the
onErrorandonSettledfunctions in the event of a mutation failure and can be useful for rolling back optimistic updates.
onSuccess: Function(data, inputArguments) => Promise | undefined- Optional
- This function will fire when the mutation is successful and will be passed the mutation‘s result.
- Fires after the
mutate-levelonSuccesshandler (if it is defined) - If a promise is returned, it will be awaited and resolved before proceeding
onError: Function(err, inputArguments, onMutateValue) => Promise | undefined- Optional
- This function will fire if the mutation encounters an error and will be passed the error.
- Fires after the
mutate-levelonErrorhandler (if it is defined) - If a promise is returned, it will be awaited and resolved before proceeding
onSettled: Function(data, error, inputArguments, onMutateValue) => Promise | undefined- Optional
- This function will fire when the mutation is either successfully fetched or encounters an error and be passed either the data or error
- Fires after the
mutate-levelonSettledhandler (if it is defined) - If a promise is returned, it will be awaited and resolved before proceeding
throwOnError- Defaults to
true - Set this to
falseif failed mutations should not re-throw errors from the mutation function to themutatefunction.
- Defaults to
useErrorBoundary- Defaults to false, typically you will not use this
- Set this to true if you want mutation errors to be thrown in the render phase and propagate to the nearest error boundary
Returns
[invoke, mutationExtras]
invoke: Function(inputArguments, { onSuccess, onSettled, onError, throwOnError }) => Promise
- The mutation function you can call with inputArguments to trigger the mutation and optionally override the original mutation options.
inputArguments: any- Optional
- The inputArguments object to pass to the
mutationResolver.
- Remaining options extend the same options described above in the
useMutationhook. - Lifecycle callbacks defined here will fire after those of the same type defined in the
useMutation-level options.
mutationExtras: Object
status: String- Will be:
idleinitial status prior to the mutation function executing.loadingif the mutation is currently executing.errorif the last mutation attempt resulted in an error.successif the last mutation attempt was successful.
isIdle,isLoading,isSuccess,isError: boolean variables derived fromstatusdata: undefined | Any- Defaults to
undefined - The last successfully resolved data for the mutation.
- Defaults to
error: null | Error- The error object for the query, if an error was encountered.
reset: Function() => void- A function to clean the mutation internal state (i.e., it resets the mutation to its initial state).
