React Academy · Lektion

Håndtering af storage-hændelser på tværs af faner

Reagér på ændringer i localStorage i andre browserfaner ved hjælp af en listener til storage-hændelsen.

Lektion 3 af 413 trin

Håndtering af storage-hændelser på tværs af faner 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.

Problemet med forældede data på tværs af faner

Når en bruger har din app åben i to faner og opdaterer en værdi i fane A, viser fane B stadig den gamle tilstand. Hver fane har sin egen React-tilstand i hukommelsen, selv om de deler localStorage.

Uden koordinering er fanerne uenige om den aktuelle værdi.

storage-hændelsen udløses i andre faner

Browseren udløser en storage-hændelse på andre faner med samme origin, hver gang localStorage ændres. Det er vigtigt, at hændelsen ikke udløses i den fane, der foretog ændringen.

Det er præcis det signal, fane B har brug for, for at opdage at fane A har opdateret noget.

Lyt med addEventListener

I en useEffect kalder du window.addEventListener('storage', handler) og returnerer en oprydningsfunktion, der fjerner lytteren. Det abonnerer komponenten på ændringer på tværs af faner.

Effekten bør køre én gang ved montering, så et tomt eller stabilt afhængighedsarray er passende.

StorageEvent-egenskaber

Hændelsesobjektet indeholder key (hvilken nøgle der blev ændret), oldValue og newValue (strengene før og efter) samt storageArea (det berørte lagerobjekt).

En null-nøgle med null-værdier betyder, at hele lageret blev ryddet.

Filtrering efter dine nøgler

Storage-hændelsen udløses for hver nøgle på originen, så din handler bør kontrollere event.key === yourKey, før den reagerer. Ved at ignorere irrelevante nøgler undgår du unødvendige rendering-opdateringer.

Håndter også tilfældet, hvor event.newValue er null, hvilket betyder, at nøglen blev fjernet.

Opdatering af React-tilstanden ved hændelsen

Når en relevant ændring ankommer, skal du parse event.newValue og kalde din setter for at opdatere React-tilstanden. Det bringer den anden fane i overensstemmelse med ændringen, der blev foretaget et andet sted.

Sammen med en useLocalStorage-hook lukker det kredsløbet mellem fanerne.

Alternativet BroadcastChannel

BroadcastChannel giver faner med samme origin mulighed for at sende meddelelser direkte til hinanden med postMessage. Det er renere end at bruge storage-hændelser som mellemled og fungerer også uden at skrive til localStorage.

Du opretter en kanal med et navn, sender opdateringer og lytter efter message-hændelser.

useSyncExternalStore til lageret

React stiller useSyncExternalStore til rådighed til abonnementer på eksterne datalagre på en måde, der er sikker ved samtidig rendering. Du kan koble dens subscribe-funktion til storage-hændelsen og dens snapshot-funktion til en læsning fra localStorage.

Det integrerer opdateringer fra eksternt lager korrekt med React-rendering.

Brugsscenarie: log ud på tværs af faner

Et klassisk scenarie er at logge ud overalt: Når én fane rydder godkendelsesflaget, registrerer storage-hændelsen i de andre faner det og omdirigerer dem til login-skærmen.

Det forhindrer en forældet fane i fortsat at vise godkendt indhold.

Synkronisering af mørk tilstand på tværs af faner

Et tema er et andet godt eksempel: Når mørk tilstand slås til eller fra i én fane, skrives det til localStorage, storage-hændelsen udløses i de andre, og de opdaterer straks deres tematilstand, så den passer.

Brugeren får et ensartet udseende, uanset hvilken fane du skifter til.

Samling af det hele

Synkronisering på tværs af faner består i at lytte efter storage-hændelsen eller bruge BroadcastChannel, filtrere efter dine nøgler og opdatere React-tilstanden ud fra den nye værdi.

Til robuste abonnementer, der er sikre ved samtidig rendering, er useSyncExternalStore det moderne valg.

Hurtig kontrol

Test din forståelse af hændelser på tværs af faner.

Opsummering

Du har lært, at storage-hændelsen udløses i andre faner, hvordan du lytter efter den, filtrerer efter nøgle og opdaterer tilstanden, samt hvilke alternativer BroadcastChannel og useSyncExternalStore tilbyder.

Du har set virkelige brugsscenarier som at logge ud overalt og synkronisere mørk tilstand på tværs af faner.

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 “Håndtering af storage-hændelser på tværs af faner” gratis?

Ja — hele teksten til “Håndtering af storage-hændelser på tværs af faner” 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 “Håndtering af storage-hændelser på tværs af faner”?

Reagér på ændringer i localStorage i andre browserfaner ved hjælp af en listener til storage-hændelsen. 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 “Håndtering af storage-hændelser på tværs af faner”?

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