Synkronisere tilstand med localStorage
Bygg en egendefinert useLocalStorage-hook som holder React-tilstand og localStorage synkronisert begge veier.
Synkronisere tilstand med localStorage er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.
Den naive tilnærmingen kommer i utakt
Det er lett å først lese localStorage ett sted og skrive til det et annet sted, men disse delene kan komme i utakt. Tilstandsoppdateringer som glemmer å lagre, eller lagrede verdier som ikke gjenspeiles i tilstanden, fører til feil.
Du trenger én sannhetskilde som holder React-tilstanden og lagringen synkronisert.
Den egendefinerte useLocalStorage-hooken
Den ryddige løsningen er en useLocalStorage-hook som pakker inn useState og lagrer endringer automatisk. Den returnerer en verdi og en setter, akkurat som useState.
Den som bruker hooken, bruker den akkurat som vanlig tilstand, men får varig lagring uten ekstra arbeid.
Lat initialiseringsfunksjon
Det å lese localStorage er synkront arbeid, så du bør ikke gjøre det ved hver gjengivelse. Send en funksjon til useState, altså den late initialiseringsfunksjonen, slik at lesingen bare skjer én gang ved montering.
I denne funksjonen tolker du den lagrede verdien eller returnerer standardverdien som ble oppgitt.
Hvorfor lat initialisering er viktig
Hvis du beregner starttilstanden direkte som et argument, kjøres uttrykket ved hver gjengivelse, selv om resultatet ignoreres etter den første. Med en funksjon kaller React den bare én gang.
For localStorage-lesinger unngår dette gjentatt synkront arbeid på hovedtråden ved hver gjengivelse.
Synkronisering via useEffect
For å lagre oppdateringer legger du til en useEffect som kjører hver gang verdien endres, og kaller localStorage.setItem(key, JSON.stringify(value)).
Når du legger verdien i avhengighetsarrayet, skriver hver tilstandsendring automatisk gjennom til lagringen.
Funksjonelle oppdateringer unngår utdaterte closures
Når du setter en verdi basert på den forrige verdien, bruker du den funksjonelle formen setValue(prev => prev + 1). Dette unngår utdaterte closures der en gammel, innfanget verdi ville blitt skrevet.
Det er særlig viktig i hendelsesbehandlere og effekter som kan fange et utdatert øyeblikksbilde.
Håndtering av en null-verdi i lagringen
getItem returnerer null når nøkkelen ikke finnes. Initialiseringsfunksjonen må oppdage dette og bruke standardverdien i stedet for å forsøke å tolke null.
En kontroll som stored != null ? JSON.parse(stored) : defaultValue håndterer det første besøket på en god måte.
Generics i TypeScript
I TypeScript gjør du hooken generisk: function useLocalStorage<T>(key: string, initial: T). Dette bevarer verditypen, slik at den som bruker hooken, får full typesikkerhet.
Den returnerte tuplen er typet som [T, Dispatch<SetStateAction<T>>], i samsvar med useState.
Versjonering av lagrede data
Over tid endres datastrukturen, og gamle lagrede verdier kan ødelegge ny kode. Lagre en versjonsnøkkel sammen med dataene, slik at du kan oppdage utdaterte formater.
Du kan for eksempel lagre { version: 2, data } og sammenligne versjonen ved lesing.
Fjerning ved versjonskonflikt
Når den lagrede versjonen ikke samsvarer med den gjeldende versjonen, må du forkaste eller migrere den gamle verdien i stedet for å stole på den. Den enkleste strategien er å fjerne den utdaterte oppføringen og falle tilbake til standardverdiene.
Dette hindrer krasj på grunn av data som ble skrevet av en eldre versjon av appen.
Slik settes hooken sammen
En komplett useLocalStorage kombinerer en lat initialiseringsfunksjon som leser og tolker trygt, en setter som støtter funksjonelle oppdateringer, og en useEffect som skriver tilbake med versjonering.
Resultatet er en direkte erstatning for useState som overlever sideoppdateringer.
Kort kontroll
Test forståelsen din av initialisering av tilstand.
Oppsummering
Du har lært å lage en useLocalStorage-hook med en lat initialiseringsfunksjon, lagre endringer via useEffect, bruke funksjonelle oppdateringer for å unngå utdaterte closures og håndtere nullverdier.
Du har også sett hvordan generics i TypeScript og versjonering kan brukes til å fjerne utdaterte data på en trygg måte.
Lær deg React med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 88
- Leksjoner
- 324
Ofte stilte spørsmål
Er leksjonen «Synkronisere tilstand med localStorage» gratis?
Ja – hele teksten i «Synkronisere tilstand med localStorage» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Synkronisere tilstand med localStorage»?
Bygg en egendefinert useLocalStorage-hook som holder React-tilstand og localStorage synkronisert begge veier. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med React Academy?
Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Synkronisere tilstand med localStorage»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?
Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Lese og skrive localStorage i React
- Synkronisere tilstand med localStorage
- Håndtere storage-hendelser på tvers av faner
- sessionStorage, IndexedDB og valg av riktig API