Diego Betto's Blog
Logo di React

Diego Betto · 1 giugno 2022 · 1 min di lettura

React: useContext con useState

Come combinare useContext e useState in React per condividere stato e funzione di aggiornamento tra componenti, con esempio live.

Condividi:XLinkedInFacebookWhatsApp

Nella guida a useContext abbiamo visto come condividere dati tra componenti senza props drilling. Un caso d’uso molto comune è combinare useContext con useState: non ci limitiamo a condividere un valore, ma anche la funzione per aggiornarlo, in modo che qualsiasi componente figlio possa leggere e modificare lo stato condiviso.

Il pattern

Lo stato vive in un componente Provider, insieme al suo setter, e viene passato al Context come valore:

const CounterContext = createContext();

const CounterProvider = ({ children }) => {
  const [count, setCount] = useState(0);

  return (
    <CounterContext.Provider value={{ count, setCount }}>
      {children}
    </CounterContext.Provider>
  );
};

Qualsiasi componente annidato dentro CounterProvider può poi leggere count e chiamare setCount tramite useContext, senza doverli ricevere come prop:

const Counter = () => {
  const { count, setCount } = useContext(CounterContext);

  return (
    <button onClick={() => setCount(count + 1)}>
      Hai cliccato {count} volte
    </button>
  );
};

Esempio live

Ecco un esempio completo e interattivo su CodeSandbox:

Se il tuo stato inizia a diventare complesso, con molte azioni diverse, vale la pena valutare anche useReducer al posto di useState.

Condividi:XLinkedInFacebookWhatsApp
Diego Betto

Scritto da

Diego Betto

Co-Fondatore & CTO presso PAPION. Senior full-stack engineer specializzato in React, TypeScript, Node.js e sicurezza applicativa.