React Academy · Lektion

Mutationer og optimistiske opdateringer med SWR

Brug mutate() og useSWRMutation til skrivehandlinger med optimistisk brugergrænseflade og automatisk tilbagerulning.

Lektion 3 af 413 trin

Mutationer og optimistiske opdateringer med SWR er en gratis React Academy-lektion på CoddyKit. Dette er lektion 3 af 4. Du kan læse hele lektionen gratis nedenfor — og derefter øve dig praktisk i browseren med en indbygget kodeeditor og en AI-vejleder, der er tilgængelig døgnet rundt. Den er en del af læringsforløbet i React Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. React Academy-kurset indeholder 4 lektioner i alt.

mutate: Revalidering efter nøgle

Den globale mutate-funktion fra swr lader dig udløse revalidering for enhver cache-nøgle hvor som helst i din applikation: mutate('/api/user') får alle useSWR('/api/user')-hooks til at hente data igen.

Importér den med: import { mutate } from 'swr'. Det er nyttigt til at ugyldiggøre data efter en serverhandling uden for en komponent, der har direkte adgang til den bundne mutate.

mutate med data: cacheopdateringer uden ny hentning

Send data som det andet argument til mutate: mutate('/api/user', updatedUser) sætter straks cachen til updatedUser uden at sende en netværksanmodning. Dette kaldes nogle gange en lokal mutation.

Tilføj { revalidate: false } som det tredje argument for at forhindre SWR i at hente data igen efter den optimistiske opdatering.

useSWRMutation: til eksplicitte udløsere

useSWRMutation er udviklet til mutationer, der initieres af brugeren (formularafsendelser, knapklik), i modsætning til automatisk hentning. Det kører ikke ved montering, men kun når du kalder trigger().

Importér fra swr/mutation: const { trigger, isMutating, data, error } = useSWRMutation('/api/post', sendRequest).

Signaturen for useSWRMutation-hentefunktionen

Hentefunktionen til useSWRMutation modtager (key, { arg }), hvor arg er den værdi, der sendes til trigger(). Eksempel: async (url, { arg: newPost }) => fetch(url, { method: 'POST', body: JSON.stringify(newPost) }).

Kald trigger({ title: 'New Post', content: '...' }) for at udføre mutationen med indlægsdataene som arg.

isMutating-tilstand

isMutating fra useSWRMutation er true, mens mutationsanmodningen er under behandling. Brug den til at deaktivere sendeknapper og vise indlæsningsindikatorer under anmodningen, så du forhindrer dobbelte indsendelser.

Det erstatter den manuelle tilstandsvariabel isSubmitting, som du ellers skulle administrere med useState.

Optimistiske opdateringer forklaret

En optimistisk opdatering anvender straks det forventede resultat i brugergrænsefladen, før serveren har bekræftet ændringen. Hvis serveren lykkes, er der ikke behov for yderligere handling. Hvis den mislykkes, rulles opdateringen tilbage til den tidligere tilstand.

Dette mønster får brugergrænseflader til at føles øjeblikkelige: En Synes godt om-knap ser straks ud til at være aktiveret uden at vente på POST-svaret.

Optimistiske opdateringer med SWR

Brug mutate(key, newData, { optimisticData: optimisticValue, rollbackOnError: true }). SWR sætter straks cachen til optimisticValue, sender genvalideringsanmodningen og ruller tilbage til den tidligere værdi, hvis anmodningen udløser en fejl.

Indstillingen rollbackOnError: true er afgørende for korrektheden: Uden den efterlader en mislykket mutation forældede optimistiske data i cachen.

Automatisk tilbagerulning ved fejl

Når rollbackOnError: true er angivet, og mutationen afvises, gendanner SWR automatisk cachen til det øjebliksbillede, der blev taget før den optimistiske opdatering. Du behøver ikke skrive manuel kode til tilbagerulning.

Angiv også populateCache: false, hvis mutationens svarindhold ikke har samme datastruktur som useSWR-dataene, så du forhindrer svaret i at opdatere cachen forkert.

Bundet mutate kontra global mutate

useSWR returnerer en bundet mutate: const { data, mutate } = useSWR('/api/user', fetcher). Denne bundne mutate er automatisk målrettet nøglen '/api/user', så du skal ikke angive nøglen igen.

Brug bundet mutate i komponenter, der ejer visningen af dataene. Brug global mutate fra swr, når du skal ugyldiggøre en nøgle fra en ikke-relateret komponent eller hjælpefunktion.

Sammenligning med React Query-mutationer

React Query's useMutation har et lignende trigger/isMutating-mønster. De vigtigste forskelle er, at React Query's onSuccess-tilbagekald med queryClient.invalidateQueries er det idiomatiske mønster til ugyldiggørelse af cachen. SWR bruger mutate-funktionen direkte til cacheopdateringer.

Begge understøtter optimistiske opdateringer og tilbagerulning, men API-strukturen er forskellig. Teams, der er fortrolige med den ene, kan hurtigt lære den anden.

Cachestrategi efter mutation

Efter en vellykket mutation har du tre muligheder: Hent dataene igen ved at kalde mutate(key), opdatér cachen med svarindholdet (hvis API'et returnerer den opdaterede ressource), eller kombinér begge dele med optimistiske opdateringer og genvalidering.

Ved mutationer på lister (når du tilføjer et element) kan du manuelt opdatere cachen ved at tilføje det nye element og derefter genvalidere for at bekræfte servertilstanden. Det undgår at hente hele listen igen, samtidig med at dataene forbliver konsistente.

Tilbagerulning af optimistisk opdatering

Hvilken indstilling skal du angive i SWR's mutate for automatisk at tilbageføre en optimistisk opdatering ved en fejl?

Opsummering af lektionen

Global mutate(key) udløser genvalidering; mutate(key, data) opdaterer cachen uden at hente dataene igen. useSWRMutation håndterer eksplicitte mutationer udløst af brugeren med trigger(), isMutating-tilstand og understøttelse af extraArg. Optimistiske opdateringer med optimisticData og rollbackOnError: true får brugergrænseflader til at føles øjeblikkelige og giver automatisk fejlhåndtering.

Bundet mutate fra useSWR er målrettet sin egen nøgle; global mutate fra swr fungerer overalt.

Gratis at komme i gang

Lær React med en AI-underviser — gratis

Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.

Kurser
88
Lektioner
324

Ofte stillede spørgsmål

Er lektionen “Mutationer og optimistiske opdateringer med SWR” gratis?

Ja — hele teksten til “Mutationer og optimistiske opdateringer med SWR” kan læses gratis her på nettet. Hvis du vil øve dig interaktivt med en indbygget kodeeditor og en AI-vejleder døgnet rundt og få adgang til resten af React Academy-kurset, skal du opgradere til CoddyKit PRO. React Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Mutationer og optimistiske opdateringer med SWR”?

Brug mutate() og useSWRMutation til skrivehandlinger med optimistisk brugergrænseflade og automatisk tilbagerulning. Du øver dig i React Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.

Skal jeg have erfaring for at begynde på React Academy?

Der kræves ingen tidligere erfaring. React Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 3 af 4.

Hvor lang tid tager lektionen “Mutationer og optimistiske opdateringer med SWR”?

De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.

Kan jeg skrive og køre kode i denne React Academy-lektion?

Ja. Alle React Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.

Alle lektioner i dette kursus

  1. SWR-grundbegreber: Stale-While-Revalidate
  2. useSWR-hook: Hentning, indlæsning og fejltilstande
  3. Mutationer og optimistiske opdateringer med SWR
  4. SWR kontra React Query: Vælg det rette værktøj
← Tilbage til React Academy