Documentation Index
Fetch the complete documentation index at: https://kubo-47e69177.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Optimistic Updates
Etapes
- Annuler les requetes actives.
- Sauvegarder le cache precedent.
- Appliquer la valeur optimiste.
- Rollback en cas d’erreur.
- Invalider a la fin.
Exemple
components/todo-toggle.tsx
"use client";
import { useQueryClient } from "@tanstack/react-query";
import { useActionMutation } from "@zapaction/query";
import { toggleTodo } from "../app/actions";
import { todoKeys } from "../app/query-keys";
const queryClient = useQueryClient();
const mutation = useActionMutation(toggleTodo, {
onMutate: async (variables) => {
await queryClient.cancelQueries({ queryKey: todoKeys.all() });
const previous = queryClient.getQueryData(todoKeys.all());
queryClient.setQueryData(todoKeys.all(), (current: any[] = []) =>
current.map((todo) =>
todo.id === variables.id ? { ...todo, done: !todo.done } : todo
)
);
return { previous };
},
onError: (_error, _variables, context) => {
if (context?.previous) {
queryClient.setQueryData(todoKeys.all(), context.previous);
}
},
onSettled: async () => {
await queryClient.invalidateQueries({ queryKey: todoKeys.all() });
}
});