0Pricing
React Academy · Leçon

Mutations avec useMutation

Envoyez des données aux API avec useMutation, gérez les états de chargement et d’erreur, puis invalidez les requêtes en cas de réussite.

Mutations avec useMutation est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 3 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Bienvenue

Dans cette leçon, vous utiliserez useMutation pour envoyer des données aux API, gérerez les états de chargement et d’erreur, puis invaliderez les requêtes obsolètes après une mutation réussie.

Principes de base de useMutation

Appelez useMutation avec une mutationFn. Elle renvoie une fonction mutate ainsi que des propriétés d’état. Appelez mutate() pour déclencher l’opération.
import { useMutation } from '@tanstack/react-query';

const { mutate, isLoading, isError } = useMutation({
  mutationFn: (newPost) => fetch('/api/posts', {
    method: 'POST',
    body: JSON.stringify(newPost),
  }).then(r => r.json()),
});

Appeler mutate

Appelez `mutate(variables)` depuis un gestionnaire d’événement. Les variables sont transmises à mutationFn comme premier argument.
<button onClick={() => mutate({ title: 'New Post' })}>
  Create Post
</button>

Rappels : onSuccess, onError, onSettled

Ajoutez des options de rappel à useMutation : onSuccess s’exécute après une mutation réussie, onError en cas d’échec et onSettled dans les deux cas, comme finally.
useMutation({
  mutationFn: createPost,
  onSuccess: (data) => {
    console.log('Created:', data);
    navigate('/posts/' + data.id);
  },
  onError: (error) => {
    toast.error(error.message);
  },
})

Invalider les requêtes après une mutation

Après une mutation réussie, invalidez les requêtes associées afin que React Query récupère des données à jour. Utilisez queryClient.invalidateQueries dans onSuccess.
import { useQueryClient } from '@tanstack/react-query';

const queryClient = useQueryClient();

const { mutate } = useMutation({
  mutationFn: createPost,
  onSuccess: () => {
    queryClient.invalidateQueries({ queryKey: ['posts'] });
  },
});

mutateAsync pour la syntaxe await

Utilisez `mutateAsync` à la place de `mutate` pour attendre la fin de la mutation et la gérer avec try/catch.
const { mutateAsync } = useMutation({ mutationFn: createPost });

async function handleSubmit() {
  try {
    const post = await mutateAsync({ title: 'Draft' });
    navigate('/posts/' + post.id);
  } catch (err) {
    setError(err.message);
  }
}

Désactiver la soumission pendant une mutation

Utilisez `isPending`, ou `isLoading`, pour désactiver le bouton de soumission pendant l’exécution de la mutation.
const { mutate, isPending } = useMutation({ mutationFn: saveItem });

<button onClick={() => mutate(item)} disabled={isPending}>
  {isPending ? 'Saving...' : 'Save'}
</button>

Mises à jour optimistes avec onMutate

Utilisez onMutate pour mettre à jour le cache de manière optimiste avant la réponse du serveur. Revenez à l’état précédent dans onError en utilisant le contexte renvoyé par onMutate.
useMutation({
  mutationFn: likePost,
  onMutate: async (id) => {
    await queryClient.cancelQueries({ queryKey: ['posts'] });
    const prev = queryClient.getQueryData(['posts']);
    queryClient.setQueryData(['posts'], old => old.map(p =>
      p.id === id ? { ...p, likes: p.likes + 1 } : p));
    return { prev };
  },
  onError: (err, id, ctx) => queryClient.setQueryData(['posts'], ctx.prev),
  onSettled: () => queryClient.invalidateQueries({ queryKey: ['posts'] }),
})

Réinitialiser l’état d’une mutation

Appelez `reset()` depuis useMutation pour effacer l’état de la mutation, notamment les données, l’erreur et le statut. C’est utile après avoir changé de page ou vidé un formulaire.
const { mutate, isError, reset } = useMutation({ /* ... */ });

{isError && (
  <>
    <p>Error!</p>
    <button onClick={reset}>Try Again</button>
  </>
)}

Plusieurs mutations en parallèle

Appelez mutate plusieurs fois en parallèle : chaque appel est suivi indépendamment. Utilisez mutateAsync avec Promise.all pour exécuter des mutations en parallèle.
await Promise.all([
  mutateAsync({ id: 1, title: 'First' }),
  mutateAsync({ id: 2, title: 'Second' }),
]);

Vérification rapide

Après une mutation réussie, quelle est la méthode recommandée pour garantir que l’interface affiche des données à jour ?

Récapitulatif

useMutation expose mutate, isPending et les rappels du cycle de vie. Utilisez onSuccess pour invalider les requêtes associées. Utilisez mutateAsync dans les flux fondés sur await. Utilisez onMutate et onError pour les mises à jour optimistes avec retour à l’état précédent.

Ensuite

Prochaine leçon : **Défilement infini et pagination avec useInfiniteQuery** — vous récupérerez des données paginées et chargerez de nouvelles pages de manière fluide.

Questions Fréquemment Posées

La leçon « Mutations avec useMutation » est-elle gratuite ?

Oui — le texte complet de « Mutations avec useMutation » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Mutations avec useMutation » ?

Envoyez des données aux API avec useMutation, gérez les états de chargement et d’erreur, puis invalidez les requêtes en cas de réussite. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 3 sur 4.

Combien de temps prend la leçon « Mutations avec useMutation » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Configurer React Query et QueryClient
  2. Mise en cache, durée de fraîcheur et récupération en arrière-plan
  3. Mutations avec useMutation
  4. Défilement infini et pagination avec useInfiniteQuery
← Retour à React Academy