0Pricing
React Academy · Lezione

Gestire gli eventi di archiviazione tra schede

Reagisca alle modifiche di localStorage in altre schede del browser usando il listener dell'evento storage.

Gestire gli eventi di archiviazione tra schede è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 3 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento React Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso React Academy include 4 lezioni in totale.

Il problema dei dati obsoleti tra schede

Quando l'app è aperta in due schede e si aggiorna un valore nella scheda A, la scheda B continua a mostrare lo stato precedente. Ogni scheda dispone di un proprio stato React in memoria, anche se entrambe condividono localStorage.

Senza coordinamento, le schede non concordano sul valore corrente.

L'evento storage viene attivato nelle altre schede

Ogni volta che localStorage cambia, il browser invia un evento storage alle altre schede della stessa origine. È importante notare che l'evento non viene inviato alla scheda che ha effettuato la modifica.

È esattamente il segnale di cui la scheda B ha bisogno per sapere che la scheda A ha aggiornato qualcosa.

Ascolto con addEventListener

In un useEffect si chiama window.addEventListener('storage', handler) e si restituisce una funzione di pulizia che lo rimuove. In questo modo il componente si iscrive alle modifiche tra schede.

L'effetto dovrebbe essere eseguito una volta sola al montaggio, quindi è appropriato usare un array di dipendenze vuoto o stabile.

Proprietà di StorageEvent

L'oggetto evento contiene key (la chiave modificata), oldValue e newValue (le stringhe prima e dopo la modifica) e storageArea (l'oggetto di archiviazione interessato).

Una chiave null con valori null indica che l'intera archiviazione è stata cancellata.

Filtrare le proprie chiavi

L'evento storage viene attivato per ogni chiave dell'origine, quindi il gestore dovrebbe verificare event.key === yourKey prima di reagire. Ignorare le chiavi non pertinenti evita render non necessari.

Gestisca anche il caso in cui event.newValue sia null, indicando che la chiave è stata rimossa.

Aggiornamento dello stato React sull'evento

Quando arriva una modifica pertinente, esegua il parsing di event.newValue e chiami il setter per aggiornare lo stato React. In questo modo la seconda scheda si sincronizza con la modifica effettuata altrove.

In combinazione con un hook useLocalStorage, questo completa il ciclo di sincronizzazione tra le schede.

L'alternativa BroadcastChannel

BroadcastChannel consente alle schede della stessa origine di inviarsi direttamente messaggi tramite postMessage. È più pulito che sfruttare indirettamente gli eventi di archiviazione e funziona anche senza scrivere in localStorage.

Si crea un canale tramite il nome, si pubblicano gli aggiornamenti e si ascoltano gli eventi message.

useSyncExternalStore per l'archiviazione

React mette a disposizione useSyncExternalStore per iscriversi a store esterni in modo sicuro in presenza di rendering concorrente. È possibile collegare la sua funzione subscribe all'evento storage e il suo snapshot a una lettura di localStorage.

In questo modo gli aggiornamenti dell'archiviazione esterna vengono integrati correttamente nel rendering di React.

Caso d'uso: logout tra tutte le schede

Un'applicazione classica è eseguire il logout ovunque: quando una scheda cancella il flag di autenticazione, l'evento storage nelle altre schede lo rileva e le reindirizza alla schermata di accesso.

In questo modo una scheda con dati obsoleti non può continuare a mostrare contenuti autenticati.

Sincronizzazione della modalità scura tra schede

Il tema è un altro ottimo caso d'uso: attivando la modalità scura in una scheda, la modifica viene scritta in localStorage, l'evento storage viene attivato nelle altre schede e queste aggiornano immediatamente lo stato del tema.

L'utente ottiene un aspetto coerente indipendentemente dalla scheda a cui passa.

Composizione finale

La sincronizzazione tra schede consiste nell'ascoltare l'evento storage (oppure nell'usare BroadcastChannel), filtrare le proprie chiavi e aggiornare lo stato React a partire dal nuovo valore.

Per iscrizioni robuste e sicure in presenza di rendering concorrente, useSyncExternalStore è la scelta moderna.

Verifica rapida

Verifichi la comprensione degli eventi tra schede.

Riepilogo

Ha imparato che l'evento storage viene attivato nelle altre schede, come ascoltarlo, filtrarlo per chiave e aggiornare lo stato, oltre alle alternative BroadcastChannel e useSyncExternalStore.

Ha visto casi d'uso reali come il logout ovunque e la modalità scura sincronizzata tra schede.

Domande Frequenti

La lezione «Gestire gli eventi di archiviazione tra schede» è gratuita?

Sì — il testo completo di «Gestire gli eventi di archiviazione tra schede» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso React Academy, passa a CoddyKit PRO. Il corso React Academy include 4 lezioni in totale.

Cosa imparerò in «Gestire gli eventi di archiviazione tra schede»?

Reagisca alle modifiche di localStorage in altre schede del browser usando il listener dell'evento storage. Eserciti React Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare React Academy?

Non è richiesta alcuna esperienza precedente. React Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 3 di 4.

Quanto tempo richiede la lezione «Gestire gli eventi di archiviazione tra schede»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione React Academy?

Sì. Ogni lezione React Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Leggere e scrivere in localStorage con React
  2. Sincronizzare lo stato con localStorage
  3. Gestire gli eventi di archiviazione tra schede
  4. sessionStorage, IndexedDB e scelta dell'API giusta
← Torna a React Academy