Atomi derivati e asincroni
Comporre atomi derivati da altri atomi e creare atomi asincroni integrati con Suspense
Atomi derivati e asincroni è 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.
Atom derivati in sola lettura
Crei un atom derivato passando una funzione getter: const doubleAtom = atom(get => get(countAtom) * 2). Questo atom non memorizza alcun valore; viene ricalcolato ogni volta che countAtom cambia.
Gli atom derivati sono sempre aggiornati senza alcuna sincronizzazione manuale. Sono l'equivalente Jotai delle proprietà calcolate.
Rilevamento automatico delle dipendenze
Jotai tiene traccia degli atom a cui si accede all'interno della funzione getter e rivaluta automaticamente l'atom derivato quando uno qualsiasi di essi cambia. Non è necessario dichiarare esplicitamente le dipendenze.
Se il getter chiama get(atomA) e get(atomB), l'atom derivato si aggiorna ogni volta che cambia atomA o atomB.
Atom derivati scrivibili
Un atom derivato scrivibile ha sia un getter sia un setter: atom(get => get(baseAtom).toUpperCase(), (get, set, newValue) => set(baseAtom, newValue.toLowerCase())). La lettura restituisce il valore trasformato; la scrittura lo trasforma e lo memorizza nuovamente.
Questo schema implementa una trasformazione bidirezionale dei dati senza esporre direttamente l'atom di base.
Atom asincroni con Promise
La funzione getter può essere asincrona: const userAtom = atom(async get => { const id = get(userIdAtom); return await fetchUser(id); }). Jotai accetta nativamente le Promise restituite dai getter degli atom.
Quando userIdAtom cambia, Jotai esegue nuovamente il getter asincrono e il componente che lo utilizza viene sospeso durante il recupero dei dati.
Atom asincroni e React Suspense
Gli atom asincroni si integrano perfettamente con React Suspense. Avvolga il componente che li utilizza in un confine Suspense con un fallback. Il componente viene sospeso mentre la Promise è in attesa e viene renderizzato quando si risolve.
Questo elimina la gestione manuale dello stato di caricamento nel componente: nessun flag isLoading e nessun useEffect per il recupero dei dati.
loadable: evitare Suspense
Importi loadable da jotai/utils. Avvolga un atom asincrono: const loadableUserAtom = loadable(userAtom). I componenti che leggono loadableUserAtom ricevono {state: 'loading'}, {state: 'hasData', data: user} oppure {state: 'hasError', error}, senza entrare in sospensione.
Utilizzi loadable quando deve visualizzare uno stato di caricamento personalizzato direttamente nell'interfaccia invece di affidarsi a un confine Suspense.
Reimpostare gli atom
L'utility atomWithReset di jotai/utils crea un atom che può essere reimpostato al valore iniziale utilizzando il simbolo RESET. È più chiaro che tenere traccia manualmente del valore iniziale e riapplicarlo.
Nei moduli, reimposti tutti gli atom dei campi al momento dell'invio o dell'annullamento chiamando ogni setter con RESET in un unico gestore.
Concatenare gli atom
Un atom derivato può leggere diversi altri atom: const summaryAtom = atom(get => ({ user: get(userAtom), settings: get(settingsAtom), count: get(countAtom) })). Questo crea un unico riferimento stabile che si aggiorna quando cambia una qualsiasi dipendenza.
I componenti che hanno bisogno solo del riepilogo si sottoscrivono a summaryAtom anziché a tutti e tre gli atom individuali.
Atom condizionali
Gli atom derivati possono leggere condizionalmente atom diversi: const activeDataAtom = atom(get => get(modeAtom) === 'A' ? get(dataAAtom) : get(dataBAtom)). Quando modeAtom cambia, l'atom derivato cambia automaticamente la propria sorgente dati.
Jotai crea nuovamente la sottoscrizione all'atom corretto a ogni valutazione, garantendo che non rimangano dati obsoleti del ramo inattivo.
Gestione degli errori negli atom asincroni
Se il getter di un atom asincrono genera un errore o rifiuta la Promise, l'errore viene propagato al più vicino ErrorBoundary di React quando l'atom viene utilizzato con Suspense. Con loadable, l'errore appare nel campo state.error per una gestione direttamente nell'interfaccia.
Nel codice di produzione, abbini sempre gli atom asincroni a un ErrorBoundary oppure a un wrapper loadable.
Prestazioni degli atom derivati
Gli atom derivati memorizzano in cache il loro ultimo risultato. Se tutti gli atom dipendenti restituiscono gli stessi valori della valutazione precedente, l'atom derivato restituisce lo stesso riferimento e non si verificano nuovi rendering a valle.
Per derivazioni costose, come le trasformazioni di array di grandi dimensioni, questa memorizzazione in cache offre notevoli vantaggi in termini di prestazioni senza alcuna configurazione aggiuntiva.
Integrazione tra atom asincroni e Suspense
Che cosa accade a un componente che legge un atom asincrono mentre la sua Promise è in attesa?
Riepilogo della lezione
Gli atom derivati calcolano valori a partire da altri atom usando funzioni getter con rilevamento automatico delle dipendenze. Gli atom asincroni utilizzano getter asincroni e si integrano con React Suspense per impostazione predefinita; utilizzi loadable di jotai/utils per evitarlo e gestire direttamente nell'interfaccia gli stati di caricamento e di errore.
Gli atom derivati scrivibili consentono trasformazioni bidirezionali, mentre gli atom condizionali cambiano dinamicamente la sorgente dati in base ai valori di altri atom.
Domande Frequenti
La lezione «Atomi derivati e asincroni» è gratuita?
Sì — il testo completo di «Atomi derivati e asincroni» è 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 «Atomi derivati e asincroni»?
Comporre atomi derivati da altri atomi e creare atomi asincroni integrati con Suspense 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 «Atomi derivati e asincroni»?
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
- Atomi: l'unità di stato in Jotai
- Leggere e scrivere atomi con useAtom
- Atomi derivati e asincroni
- Jotai, Zustand e Context: quale usare e quando