Using Mutations with React#
useMutation#
Hook designed to be used for GraphQL Mutations.
Features#
- Lifecycle functions
onCompleted
&onError
- Optional Refetch queries after mutation call (with 'awaitRefetchQueries' option, to wait until they are complete before calling the mutation complete)
- Suspense support
Example#
import { useState } from 'react';
import { useMutation, query } from '../gqty';
export function LoginComponent() {
const [login, { isLoading, data, error }] = useMutation(
(mutation, args: { email: string; password: string }) => {
const { user, error } = mutation.login({ args });
if (user) {
return {
name: user.name,
};
}
return {
error,
};
},
{
onCompleted(data) {},
onError(error) {},
refetchQueries: [query.user],
awaitRefetchQueries: true,
suspense: false,
}
);
const [formData, setFormData] = useState(() => ({ email: '', password: '' }));
const errorMessage = data?.error || error?.message;
return (
<form>
<label>Email</label>
<input
value={formData.email}
onChange={(ev) => {
setFormData({
...formData,
email: ev.target.value,
});
}}
/>
<label>Password</label>
<input
value={formData.password}
onChange={(ev) => {
setFormData({
...formData,
password: ev.target.value,
});
}}
/>
<button
type="submit"
disabled={isLoading}
onClick={(ev) => {
ev.preventDefault();
login({ args: formData }).catch(console.error);
}}
>
Login
</button>
{errorMessage ? <p>Error: {errorMessage}</p> : null}
</form>
);
}