0Pricing
React Academy · Leçon

Mutations et mises à jour optimistes avec SWR

Utilisez mutate() et useSWRMutation pour les opérations d’écriture avec une interface optimiste et un retour automatique à l’état précédent

Mutations et mises à jour optimistes avec SWR 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.

mutate : revalider par clé

La fonction globale mutate du paquet swr vous permet de déclencher la revalidation de n’importe quelle clé de cache depuis n’importe quel endroit de votre application : mutate('/api/user') oblige tous les hooks useSWR('/api/user') à relancer la récupération.

Importez-la avec : import { mutate } from 'swr'. Cela est utile pour invalider les données après une action serveur effectuée en dehors d’un composant qui dispose d’un accès direct à la fonction mutate associée.

mutate avec des données : mettre à jour le cache sans nouvelle récupération

Passez les données comme deuxième argument à mutate : mutate('/api/user', updatedUser) définit immédiatement le cache sur updatedUser sans effectuer de requête réseau. On parle parfois de mutation locale.

Ajoutez { revalidate: false } comme troisième argument pour empêcher SWR d’effectuer une nouvelle récupération après la mise à jour optimiste.

useSWRMutation : pour des déclenchements explicites

useSWRMutation est conçu pour les mutations déclenchées par l’utilisateur (soumissions de formulaires, clics sur des boutons), par opposition à la récupération automatique. Il ne s’exécute pas au montage ; il s’exécute uniquement lorsque vous appelez trigger().

Importez-le depuis swr/mutation : const { trigger, isMutating, data, error } = useSWRMutation('/api/post', sendRequest).

Signature de la fonction de récupération de useSWRMutation

La fonction de récupération de useSWRMutation reçoit (key, { arg }), où arg est la valeur transmise à trigger(). Exemple : async (url, { arg: newPost }) => fetch(url, { method: 'POST', body: JSON.stringify(newPost) }).

Appelez trigger({ title: 'New Post', content: '...' }) pour lancer la mutation avec les données de la publication comme arg.

État isMutating

isMutating de useSWRMutation vaut true pendant l'exécution de la requête de mutation. Utilisez-le pour désactiver les boutons d'envoi et afficher des indicateurs de chargement pendant la requête, afin d'éviter les envois en double.

Cela remplace la variable d'état isSubmitting que vous devriez sinon gérer avec useState.

Explication des mises à jour optimistes

Une mise à jour optimiste applique immédiatement à l'interface le résultat attendu, avant que le serveur ne confirme la modification. Si le serveur réussit, aucune autre action n'est nécessaire. En cas d'échec, la mise à jour est restaurée à son état précédent.

Ce schéma donne aux interfaces une impression d'instantanéité : un bouton J'aime semble immédiatement activé, sans attendre la réponse POST.

Mises à jour optimistes avec SWR

Utilisez mutate(key, newData, { optimisticData: optimisticValue, rollbackOnError: true }). SWR définit immédiatement le cache sur optimisticValue, envoie la requête de revalidation et restaure la valeur précédente si la requête lève une exception.

L'option rollbackOnError: true est essentielle pour garantir la fiabilité : sans elle, une mutation échouée laisse des données optimistes obsolètes dans le cache.

Restauration automatique en cas d'erreur

Lorsque rollbackOnError: true est défini et que la mutation est rejetée, SWR restaure automatiquement le cache à partir de l'instantané pris avant la mise à jour optimiste. Aucun code de restauration manuel n'est nécessaire.

Définissez également populateCache: false si le corps de la réponse de la mutation ne correspond pas à la forme des données de useSWR, afin d'empêcher la réponse de mettre incorrectement le cache à jour.

mutate lié et mutate global

useSWR renvoie un mutate lié : const { data, mutate } = useSWR('/api/user', fetcher). Ce mutate lié cible automatiquement la clé '/api/user' ; vous n'avez pas besoin de fournir à nouveau la clé.

Utilisez le mutate lié dans les composants qui gèrent l'affichage des données. Utilisez le mutate global de swr lorsque vous devez invalider une clé depuis un composant indépendant ou une fonction utilitaire.

Comparaison avec les mutations de React Query

Le useMutation de React Query suit un schéma trigger/isMutating similaire. Principales différences : la fonction de rappel onSuccess de React Query, associée à queryClient.invalidateQueries, constitue le schéma idiomatique d'invalidation du cache. SWR utilise directement la fonction mutate pour mettre le cache à jour.

Les deux bibliothèques prennent en charge les mises à jour optimistes et leur restauration, mais la forme de leur API diffère. Une équipe maîtrisant l'une peut apprendre l'autre rapidement.

Stratégie du cache après une mutation

Après une mutation réussie, trois options s'offrent à vous : effectuer une nouvelle récupération en appelant mutate(key), mettre à jour le cache avec le corps de la réponse (si l'API renvoie la ressource mise à jour), ou combiner les deux avec une mise à jour optimiste suivie d'une revalidation.

Pour les mutations sur une liste (ajout d'un élément), mettez manuellement le cache à jour pour ajouter le nouvel élément, puis effectuez une revalidation afin de confirmer l'état du serveur. Vous évitez ainsi de récupérer toute la liste à nouveau, tout en conservant des données cohérentes.

Restauration d'une mise à jour optimiste

Quelle option devez-vous définir dans mutate de SWR pour restaurer automatiquement une mise à jour optimiste en cas d'erreur ?

Récapitulatif de la leçon

Global mutate(key) déclenche une revalidation ; mutate(key, data) met à jour le cache sans effectuer de nouvelle récupération. useSWRMutation gère les mutations explicites déclenchées par l'utilisateur avec trigger(), l'état isMutating et la prise en charge de extraArg. Les mises à jour optimistes avec optimisticData et rollbackOnError: true donnent aux interfaces une impression d'instantanéité, avec une récupération automatique en cas d'erreur.

Le mutate lié de useSWR cible sa propre clé ; le mutate global de swr fonctionne partout.

Questions Fréquemment Posées

La leçon « Mutations et mises à jour optimistes avec SWR » est-elle gratuite ?

Oui — le texte complet de « Mutations et mises à jour optimistes avec SWR » 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 et mises à jour optimistes avec SWR » ?

Utilisez mutate() et useSWRMutation pour les opérations d’écriture avec une interface optimiste et un retour automatique à l’état précédent 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 et mises à jour optimistes avec SWR » ?

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. Concepts fondamentaux de SWR : obsolète puis revalidé
  2. Hook useSWR : récupération, chargement et erreurs
  3. Mutations et mises à jour optimistes avec SWR
  4. SWR ou React Query : choisir le bon outil
← Retour à React Academy