useDataMutation Hook
Declaratively define data mutations and respond to loading
/ error
/ data
state changes.
Basic Usage:
import { useDataMutation } from '@dhis2/app-runtime'
// Within a functional component body
const [mutate, { called, loading, error, data }] = useDataMutation(
mutation,
options
)
Input
Name | Type | Required | Description |
---|---|---|---|
mutation | Mutation | required | The Mutation definition describing the requested action |
options | Object | An optional set of query options | |
options.variables | Object | Variables to be passed to the dynamic portions of the mutation | |
options.onComplete | Function | Callback function to be called on successfull completion of the mutation. Called with the response data as the only argument. | |
options.onError | Function | Callback function to be called on failure of the mutation. Called with the error instance as the only argument. | |
options.lazy | boolean | If false, run the mutation immediately after the component mounts. Default: true |
Output
Name | Type | Description |
---|---|---|
mutate | Function | This function can be called to execute the mutation. Any in-flight HTTP requests will automatically be aborted. |
called | boolean | true if the mutation has been triggered by a call to the mutate function or on component mount with lazy: false |
loading | boolean | true if the data is not yet available and no error has yet been encountered |
error | Error or undefined | undefined if no error has occurred, otherwise the Error which was thrown |
data | QueryResult or undefined | undefined if the data is loading or an error has occurred, otherwise a map from the name of each QueryDefinition defined in the Query to the resulting data for that query |
engine | Data Engine | A reference to the DataEngine instance |
Example
import React from 'react'
import { useDataMutation } from '@dhis2/app-runtime'
const mutation = {
resource: 'indicators',
id: ({ id }) => id,
type: 'delete',
}
export const DeleteButton = ({ indicatorId, onDelete }) => {
const [mutate] = useDataMutation(mutation, {
onComplete: onDelete,
variables: {
id: indicatorId,
},
})
return <button onClick={mutate}>Delete</button>
}
See the Indicator component in the example app for an example of an
update
mutation
See the AddButton component in the example app for an example of an
create
mutation