Creare uno store personalizzato con useSyncExternalStore
Implementi da zero uno store esterno leggero e lo colleghi a React con useSyncExternalStore.
Creare uno store personalizzato con useSyncExternalStore è una lezione React Academy gratuita su CoddyKit. Questa è la lezione 4 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.
Requisiti minimi di uno store
Uno store personalizzato richiede tre elementi: uno stato, un metodo subscribe per registrare i listener e un metodo getSnapshot per leggere lo stato corrente. Questo è l’intero contratto previsto da useSyncExternalStore.
Mantenere lo store così semplice lo rende indipendente dal framework, quindi lo stesso store può essere utilizzato dentro o fuori da React.
Una factory createStore
Una factory createStore accetta un valore iniziale e restituisce un oggetto con getSnapshot, subscribe e un metodo update. Internamente contiene lo stato corrente e un insieme di callback dei listener.
Questo pattern a factory consente di creare più store indipendenti con un’unica funzione riutilizzabile.
La funzione update notifica gli iscritti
Quando update modifica lo stato, imposta il nuovo valore e poi chiama ogni listener registrato. Questi listener sono i callback forniti da React tramite subscribe.
Chiamarli comunica a React che lo store è cambiato, inducendolo a rileggere getSnapshot e a eseguire nuovamente il rendering dei componenti che leggono dallo store.
Collegarsi a React tramite l’hook
Un componente legge dallo store chiamando useSyncExternalStore con i metodi subscribe e getSnapshot dello store. L’hook restituisce il valore corrente e riesegue il rendering quando questo cambia.
È possibile racchiudere questa logica in un hook personalizzato come useStore, così i componenti chiamano una sola funzione invece di configurare ogni volta da soli gli argomenti dell’hook.
Condivisione tra componenti senza un Provider
Poiché lo store è un oggetto a livello di modulo, qualsiasi componente che lo importa condivide lo stesso stato, senza bisogno di un Context Provider. Non è necessario racchiudere l’albero in un wrapper né passare le props lungo la gerarchia.
Questo è uno dei principali vantaggi degli store esterni: uno stato globale condiviso con un modello piatto basato su importazione e utilizzo, invece di una gerarchia di Provider.
Più store per le slice
È possibile creare diversi store piccoli, ciascuno proprietario di una slice dello stato, invece di un unico store monolitico. I componenti si sottoscrivono solo alle slice che interessano loro.
Questo mantiene separate le responsabilità e limita i nuovi rendering, perché la modifica di una slice non disturba mai i componenti che leggono da un’altra.
Zustand lo usa internamente
Zustand, una popolare libreria minimale per la gestione dello stato, si basa esattamente su questo pattern e utilizza internamente useSyncExternalStore dalla versione 4. La sua API essenziale è sostanzialmente una createStore perfezionata con un livello di selector.
Comprendere questo collegamento rende meno misteriose queste librerie: sono wrapper sottili ed ergonomici costruiti sulla stessa primitiva che è possibile implementare autonomamente.
Nuovo rendering solo per le slice modificate
Passando a getSnapshot un selector che restituisce solo la porzione di stato utilizzata da un componente, si garantisce che il componente esegua nuovamente il rendering soltanto quando quella porzione cambia.
È necessario che il risultato del selector sia stabile, quindi occorre memoizzare i valori derivati per evitare il loop infinito causato dalla creazione di un nuovo riferimento, mantenendo comunque gli aggiornamenti limitati alla slice pertinente.
Un'etichetta di debug per Devtools
Per il debug è possibile associare un'etichetta a uno store e registrare gli aggiornamenti, oppure integrarlo con i devtools del browser per tracciare quale store è cambiato e quando.
Anche un semplice log nella console all'interno di update, attivato solo con un flag di sviluppo, aiuta a comprendere il flusso dello stato durante la creazione dello store.
Testare lo store dentro e fuori da React
Poiché lo store è semplice JavaScript, è possibile testarne direttamente la logica: chiamare update e verificare che getSnapshot restituisca il nuovo valore, senza eseguire alcun rendering.
È inoltre possibile testarlo all'interno di React eseguendo il rendering di un componente che lo legge e verificando che, dopo update, venga eseguito nuovamente il rendering, così da coprire sia lo store sia la sua integrazione.
Verifica rapida: funzione subscribe di uno store personalizzato
Richiami il contratto del metodo subscribe di uno store personalizzato.
Riepilogo: creazione di uno store personalizzato
Uno store personalizzato necessita di state, subscribe e getSnapshot. Una factory createStore, insieme a un update che notifica gli ascoltatori, fornisce uno stato globale condiviso senza Provider, perché le importazioni del modulo condividono una singola istanza.
Utilizzi più store organizzati in slice e i selector per limitare i nuovi rendering, ricordando di mantenere stabili i riferimenti. Zustand v4+ si basa esattamente su questo pattern e lo store in semplice JavaScript è facile da testare sia dentro sia fuori da React.
Domande Frequenti
La lezione «Creare uno store personalizzato con useSyncExternalStore» è gratuita?
Sì — il testo completo di «Creare uno store personalizzato con 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 «Creare uno store personalizzato con useSyncExternalStore»?
Implementi da zero uno store esterno leggero e lo colleghi a React con useSyncExternalStore. 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 4 di 4.
Quanto tempo richiede la lezione «Creare uno store personalizzato con 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
- Il problema delle sottoscrizioni a store esterni
- API e parametri di useSyncExternalStore
- Sottoscrizione alle API del browser
- Creare uno store personalizzato con useSyncExternalStore