0Pricing
React Academy · Lezione

Leggere e scrivere atomi con useAtom

Usare useAtom, useAtomValue e useSetAtom per leggere e aggiornare gli atomi nell'albero dei componenti

Leggere e scrivere atomi con useAtom è 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.

useAtom: l'hook principale

useAtom(someAtom) restituisce [value, setter], rispecchiando l'API di useState. Il valore è lo stato corrente dell'atom; il setter lo aggiorna. Utilizzi questo hook quando un componente legge e scrive l'atom.

Il setter accetta un nuovo valore oppure una funzione di aggiornamento: setCount(c => c + 1).

useAtomValue: accesso in sola lettura

useAtomValue(someAtom) restituisce solo il valore corrente, senza setter. Lo utilizzi nei componenti di sola visualizzazione che leggono lo stato ma non lo modificano mai.

Poiché il componente non conserva un riferimento al setter, l'intento è documentato chiaramente nel codice: questo componente è un lettore puro.

useSetAtom: accesso in sola scrittura

useSetAtom(someAtom) restituisce solo la funzione setter. È importante notare che non sottoscrive il componente al valore dell'atom. Il componente non esegue mai un nuovo rendering quando l'atom cambia.

Lo utilizzi per componenti di sole azioni, come i pulsanti che attivano modifiche allo stato ma non visualizzano alcuna UI derivata.

Perché useSetAtom è importante per le prestazioni

Un componente che chiama useSetAtom(countAtom) per incrementare un contatore non esegue mai un nuovo rendering quando countAtom cambia, perché non ha alcuna sottoscrizione al valore. Esegue nuovamente il rendering solo il componente che visualizza il conteggio.

Si tratta di un'ottimizzazione semplice ma potente: separare gli scrittori dai lettori per impedire nuovi rendering a cascata.

atomWithStorage per la persistenza

Importi atomWithStorage da jotai/utils. Lo utilizzi esattamente come atom(), ma passi una chiave di storage come primo argomento: atomWithStorage('theme', 'light'). L'atom si sincronizza automaticamente con localStorage.

Quando la pagina viene ricaricata, l'atom viene idratato da localStorage. Tutti i componenti che leggono l'atom ricevono immediatamente il valore persistito.

Reimpostare atomWithStorage

Il simbolo RESET di jotai/utils può essere passato al setter di un atomWithStorage: setter(RESET). In questo modo viene cancellata la voce in localStorage e l'atom viene reimpostato al valore iniziale.

È utile nei flussi di logout o per i pulsanti «ripristina impostazioni predefinite» nelle pagine delle impostazioni.

Famiglie di atom con atomFamily

atomFamily di jotai/utils crea una factory che restituisce un atom parametrizzato. Ad esempio, atomFamily(id => atom(null)) crea un atom separato per ogni id univoco passato.

È ideale per gestire lo stato dei singoli elementi, come selectedAtom(itemId) o expandedAtom(rowId), senza dover gestire un unico atom contenente una grande mappa.

Pulizia delle famiglie di atom

Le famiglie di atom possono crescere senza limite se gli ID si accumulano. Utilizzi atomFamily.setShouldRemove((createdAt, param) => ...) per definire un predicato di pulizia che Jotai usa per decidere quando espellere i membri obsoleti della famiglia.

Per le liste in cui gli elementi vengono aggiunti e rimossi, elimini sempre le voci della famiglia di atom quando gli elementi vengono cancellati, così da evitare perdite di memoria.

Jotai DevTools

Il pacchetto jotai-devtools fornisce un pannello visivo che elenca tutti gli atom attivi e i relativi valori correnti. Lo installi, avvolga l'app in DevTools e ispezioni lo stato degli atom in tempo reale.

Ogni aggiornamento di un atom viene registrato con il valore precedente e quello successivo, rendendo semplice il debug delle interazioni complesse tra atom.

Esempio di nuovo rendering selettivo

In una lista di grandi dimensioni, un componente ListContainer può usare useSetAtom(selectedIdAtom) per aggiornare la selezione senza sottoscriversi a selectedIdAtom. Eseguono nuovamente il rendering solo i singoli componenti ListItem che chiamano useAtomValue(selectedIdAtom) quando cambia la selezione.

Questo schema si adatta bene alla crescita: aggiungere migliaia di elementi alla lista non rallenta gli aggiornamenti della selezione.

Combinare i tre hook

Scelga l'hook in base alle esigenze del componente: useAtomValue per la sola visualizzazione, useSetAtom per le sole azioni e useAtom quando servono entrambe. Questo design intenzionale dell'API rende chiara a colpo d'occhio la responsabilità del componente.

Un componente che rappresenta un campo di un modulo in genere utilizza useAtom; un pulsante di invio utilizza useSetAtom; un'etichetta che visualizza un conteggio utilizza useAtomValue.

useSetAtom vs useAtom

Qual è il principale vantaggio dell'utilizzo di useSetAtom invece di useAtom?

Riepilogo della lezione

useAtom fornisce sia il valore sia il setter; useAtomValue fornisce solo il valore (sottoscrizioni di lettura); useSetAtom fornisce solo il setter (nessun nuovo rendering quando cambia il valore). atomWithStorage persiste i dati in localStorage con il supporto di RESET, mentre atomFamily crea atom associati ai singoli parametri per le liste dinamiche.

La scelta dell'hook corretto riduce al minimo i nuovi rendering non necessari e rende esplicito l'intento del componente.

Domande Frequenti

La lezione «Leggere e scrivere atomi con useAtom» è gratuita?

Sì — il testo completo di «Leggere e scrivere atomi con useAtom» è 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 «Leggere e scrivere atomi con useAtom»?

Usare useAtom, useAtomValue e useSetAtom per leggere e aggiornare gli atomi nell'albero dei componenti 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 «Leggere e scrivere atomi con useAtom»?

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. Atomi: l'unità di stato in Jotai
  2. Leggere e scrivere atomi con useAtom
  3. Atomi derivati e asincroni
  4. Jotai, Zustand e Context: quale usare e quando
← Torna a React Academy