React Academy · Lektion

Synkronisering af state med localStorage

Byg en tilpasset useLocalStorage-hook, der holder React-state og localStorage synkroniseret i begge retninger.

Lektion 2 af 413 trin

Synkronisering af state med localStorage er en gratis React Academy-lektion på CoddyKit. Dette er lektion 2 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.

Den naive tilgang kommer ud af takt

Den første indskydelse er måske at læse fra localStorage ét sted og skrive til den et andet sted, men de to steder kan komme ud af takt. Tilstandsopdateringer, der glemmer at gemme data, eller gemte værdier, som ikke afspejles i tilstanden, fører til fejl.

Du har brug for én sandhedskilde, der holder React-tilstand og lager synkroniseret.

Den brugerdefinerede useLocalStorage-hook

Den rene løsning er en useLocalStorage-hook, der pakker useState ind og automatisk gemmer ændringer. Den returnerer en værdi og en setter ligesom useState.

Forbrugere bruger den præcis som normal tilstand, men får vedvarende lagring uden ekstra arbejde.

Doven initialiseringsfunktion

Læsning fra localStorage er synkront arbejde, så du bør ikke udføre det ved hver rendering. Giv en funktion til useState, altså den dovne initialiseringsfunktion, så læsningen kun sker én gang ved montering.

Inde i funktionen parser du den gemte værdi eller returnerer den angivne standardværdi.

Hvorfor doven initialisering er vigtig

Hvis du beregner den oprindelige tilstand direkte som et argument, kører udtrykket ved hver rendering, selv om resultatet ignoreres efter den første. Med en funktion kalder React den kun én gang.

Ved læsning fra localStorage undgår det gentaget synkront arbejde på hovedtråden ved hver rendering.

Synkronisering via useEffect

Hvis du vil gemme opdateringer, skal du tilføje en useEffect, der kører, hver gang værdien ændres, og kalder localStorage.setItem(key, JSON.stringify(value)).

Hvis du placerer værdien i afhængighedsarrayet, skrives alle tilstandsændringer automatisk videre til lageret.

Funktionelle opdateringer undgår forældede closures

Når du opdaterer ud fra den forrige værdi, skal du bruge den funktionelle form setValue(prev => prev + 1). Det undgår forældede closures, hvor en tidligere indfanget værdi ellers ville blive skrevet.

Det er især vigtigt i hændelseshandlere og effekter, som kan have indfanget et forældet øjebliksbillede.

Håndtering af en null-værdi i lageret

getItem returnerer null, når nøglen ikke findes. Din initialiseringsfunktion skal registrere dette og bruge standardværdien i stedet for at forsøge at parse null.

En kontrol som stored != null ? JSON.parse(stored) : defaultValue håndterer det første besøg på en robust måde.

TypeScript-generics

I TypeScript gør du hooken generisk: function useLocalStorage<T>(key: string, initial: T). Det bevarer værditypen, så forbrugerne får fuld typesikkerhed.

Den returnerede tupel har typen [T, Dispatch<SetStateAction<T>>], ligesom useState.

Versionsstyring af gemte data

Med tiden ændrer din datastruktur sig, og gamle gemte værdier kan få den nye kode til at fejle. Gem en versionsnøgle sammen med dataene, så du kan registrere forældede formater.

Du kan for eksempel gemme { version: 2, data } og sammenligne versionen ved læsning.

Sletning ved uoverensstemmelse mellem versioner

Når den gemte version ikke svarer til den aktuelle, skal du kassere eller migrere den gamle værdi i stedet for at stole på den. Den enkleste strategi er at fjerne den forældede post og bruge standardværdierne.

Det forhindrer nedbrud på grund af data, der blev skrevet af en ældre version af din app.

Samling af hooken

En komplet useLocalStorage kombinerer en doven initialiseringsfunktion, der læser og parser sikkert, en setter, der understøtter funktionelle opdateringer, og en useEffect, der skriver ændringer videre med versionsstyring.

Resultatet er en direkte erstatning for useState, som overlever genindlæsninger.

Hurtig kontrol

Test din forståelse af initialisering af tilstand.

Opsummering

Du har lært at bygge en useLocalStorage-hook med en doven initialiseringsfunktion, gemme ændringer via useEffect, bruge funktionelle opdateringer for at undgå forældede closures og håndtere null-værdier.

Du har også set TypeScript-generics og versionsstyring, så forældede data kan slettes sikkert.

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 “Synkronisering af state med localStorage” gratis?

Ja — hele teksten til “Synkronisering af state med localStorage” 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 “Synkronisering af state med localStorage”?

Byg en tilpasset useLocalStorage-hook, der holder React-state og localStorage synkroniseret i begge retninger. 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 2 af 4.

Hvor lang tid tager lektionen “Synkronisering af state med localStorage”?

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. Læsning og skrivning i localStorage i React
  2. Synkronisering af state med localStorage
  3. Håndtering af storage-hændelser på tværs af faner
  4. sessionStorage, IndexedDB og valg af den rigtige API
← Tilbage til React Academy