Synkronisering af state med localStorage
Byg en tilpasset useLocalStorage-hook, der holder React-state og localStorage synkroniseret i begge retninger.
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.
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
- Læsning og skrivning i localStorage i React
- Synkronisering af state med localStorage
- Håndtering af storage-hændelser på tværs af faner
- sessionStorage, IndexedDB og valg af den rigtige API