0Pricing
React Academy · Lezione

API e parametri di useSyncExternalStore

Impari a utilizzare gli argomenti subscribe, getSnapshot e getServerSnapshot e comprenda quali garanzie debbano offrire.

API e parametri di useSyncExternalStore è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 2 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.

Panoramica dei tre argomenti

useSyncExternalStore accetta fino a tre argomenti: subscribe, getSnapshot e un getServerSnapshot facoltativo. Insieme indicano a React come ascoltare i cambiamenti e come leggere il valore corrente.

Comprendere ogni argomento è essenziale, perché piccoli errori nella loro implementazione sono la fonte più comune di bug quando si utilizza questo hook.

La funzione subscribe

subscribe riceve un callback da React e deve registrarlo nello store, in modo che venga eseguito ogni volta che lo store cambia. Deve restituire una funzione unsubscribe che React chiamerà durante la pulizia.

React usa questa funzione per sapere quando rileggere lo snapshot; subscribe si occupa quindi esclusivamente di configurare e rimuovere la notifica dei cambiamenti.

getSnapshot restituisce il valore corrente

getSnapshot restituisce il valore corrente dello store. React lo chiama durante il rendering per leggere lo stato e di nuovo dopo le notifiche per rilevare se il valore è cambiato.

È fondamentale che restituisca un risultato stabile per riferimento quando i dati sottostanti non sono cambiati, restituendo lo stesso riferimento invece di un nuovo oggetto a ogni chiamata.

getServerSnapshot per SSR

Il getServerSnapshot facoltativo fornisce il valore usato durante il rendering lato server e il passaggio iniziale di hydration. È necessario perché il getSnapshot utilizzato solo nel browser potrebbe dipendere da API che non esistono sul server.

Fornirlo previene i disallineamenti di hydration, dando al server un valore sensato da visualizzare e coerente con ciò che il client produrrà inizialmente.

Il valore restituito

L’hook restituisce il valore dello snapshot corrente, che si utilizza direttamente nel componente come qualsiasi altro dato di stato. Quando lo store cambia, React esegue nuovamente il rendering e l’hook restituisce lo snapshot aggiornato.

Dal punto di vista del componente, è come leggere uno stato reattivo, anche se la fonte di verità risiede interamente al di fuori di React.

getSnapshot deve essere sincrono e coerente

getSnapshot deve essere eseguito in modo sincrono e restituire un valore derivato esclusivamente dallo stato corrente dello store. Non deve eseguire operazioni asincrone né produrre risultati diversi a parità di dati sottostanti.

React si basa su chiamate ripetute e sul confronto dei risultati, quindi qualsiasi comportamento non deterministico o effetto collaterale al suo interno può causare un comportamento errato.

Il pattern dello snapshot immutabile

Gli store che contengono uno stato immutabile rendono getSnapshot semplice da implementare, perché il riferimento all’oggetto dello stato corrente cambia solo quando cambiano i dati. Restituire quel riferimento garantisce confronti stabili senza alcuno sforzo aggiuntivo.

Per questo i pattern di aggiornamento immutabile si abbinano così bene all’hook: dati uguali significano riferimenti uguali e React evita i rendering non necessari.

L’errore del ciclo infinito

Un errore frequente consiste nel restituire un oggetto o un array completamente nuovo a ogni chiamata di getSnapshot, ad esempio applicando map o filter al suo interno. React vede ogni volta un nuovo riferimento e pensa che il valore sia cambiato.

Questo attiva rendering infiniti o avvisi. La soluzione consiste nel memorizzare nella cache il valore derivato e restituire lo stesso riferimento finché i dati di origine non cambiano realmente.

Mantenere stabili gli snapshot

Per evitare il ciclo, calcoli i dati derivati al di fuori di getSnapshot oppure li memorizzi, in modo che la funzione restituisca un riferimento già presente nella cache. Il pattern in stile selector utilizzato da molte librerie esiste proprio per gestire questa stabilità.

La regola fondamentale è che due chiamate a getSnapshot con dati dello store invariati devono restituire esattamente lo stesso riferimento.

Riunire i parametri

In pratica, si scrive un subscribe che aggiunge e rimuove un listener, un getSnapshot che legge un valore corrente stabile e, per SSR, un getServerSnapshot che restituisce un valore compatibile con il server.

Quando questi tre elementi sono corretti, l’hook offre letture coerenti e sicure nel rendering concorrente dello store esterno, con il minimo codice aggiuntivo.

Verifica rapida: i parametri di useSyncExternalStore

Individui il ruolo di getSnapshot.

Riepilogo: API di useSyncExternalStore

L’hook accetta subscribe, getSnapshot e, facoltativamente, getServerSnapshot. subscribe collega un listener e restituisce una funzione unsubscribe; getSnapshot legge il valore corrente in modo sincrono e deve essere stabile per riferimento; getServerSnapshot fornisce un valore sicuro per SSR.

Il problema tipico consiste nel restituire un nuovo oggetto a ogni chiamata, causando cicli infiniti. Memorizzi nella cache i valori derivati, così i dati invariati producono lo stesso riferimento.

Domande Frequenti

La lezione «API e parametri di useSyncExternalStore» è gratuita?

Sì — il testo completo di «API e parametri di useSyncExternalStore» è 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 «API e parametri di useSyncExternalStore»?

Impari a utilizzare gli argomenti subscribe, getSnapshot e getServerSnapshot e comprenda quali garanzie debbano offrire. 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 2 di 4.

Quanto tempo richiede la lezione «API e parametri di useSyncExternalStore»?

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. Il problema delle sottoscrizioni a store esterni
  2. API e parametri di useSyncExternalStore
  3. Sottoscrizione alle API del browser
  4. Creare uno store personalizzato con useSyncExternalStore
← Torna a React Academy