React: Guida Completa a useReducer per una Gestione Ottimale dello Stato
Quando si lavora con React, la gestione dello stato è una delle sfide principali. Spesso si usa useState, ma per stati complessi esiste un’alternativa più potente: useReducer. Questo hook è particolarmente utile per gestire logiche più strutturate e scalabili.
Io sono Marco Crotti, sviluppatore React a Bergamo, e nel mio sito marcocrotti.it condivido guide pratiche su React. In questo articolo ti mostrerò come e quando usare useReducer per migliorare la tua gestione dello stato.
Cos’è useReducer?
useReducer è un hook di React che fornisce un’alternativa a useState, permettendo di gestire stati più complessi attraverso una funzione reducer. La sintassi di base è la seguente:
const [state, dispatch] = useReducer(reducer, initialState);
Qui:
- state è lo stato attuale.
- dispatch è una funzione che invia azioni al reducer.
- reducer è una funzione che specifica come lo stato deve cambiare.
- initialState è il valore iniziale dello stato.
Vediamo un esempio pratico.
Quando Usare useReducer?
Usa useReducer invece di useState quando:
- Hai uno stato con più sotto-valori interdipendenti.
- La logica di aggiornamento è complessa (es. con più azioni).
- Vuoi separare la gestione dello stato dalla UI.
Esempio: Un Contatore con useReducer
Immaginiamo di dover creare un contatore con tre azioni: incrementare, decrementare e resettare. Con useReducer possiamo gestire lo stato in modo più organizzato.
import { useReducer } from "react";
const initialState = { count: 0 };
function reducer(state, action) {
switch (action.type) {
case "increment": return { count: state.count + 1 };
case "decrement": return { count: state.count - 1 };
case "reset": return initialState;
default: return state;
}
}
export default function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>Contatore: {state.count}</p>
<button onClick={() => dispatch({ type: "increment" })}>+</button>
<button onClick={() => dispatch({ type: "decrement" })}>-</button>
<button onClick={() => dispatch({ type: "reset" })}>Reset</button>
</div>);
}
Vantaggi di useReducer
Rispetto a useState, useReducer offre diversi vantaggi:
- Codice più chiaro: la gestione dello stato è separata dalla logica della UI.
- Facilità di test: il reducer è una funzione pura, quindi facile da testare.
- Migliore scalabilità: perfetto per applicazioni più complesse.
useReducer vs useState: Quando Usare Quale?
Se lo stato è semplice, useState è sufficiente. Ma quando la logica diventa più articolata, con molteplici azioni e dipendenze tra stati, useReducer diventa la scelta ideale.
Per esempio:
- Un semplice input? → useState.
- Gestione di una lista con filtri e ordinamenti? → useReducer.
Conclusione
Il React Hook useReducer è uno strumento potente per gestire stati complessi in modo chiaro e scalabile. Se il tuo progetto sta crescendo e la gestione dello stato con useState diventa difficile, prova ad usare useReducer.
Se sei uno sviluppatore React a Bergamo e vuoi migliorare l’architettura della tua applicazione, contattami su marcocrotti.it. Posso aiutarti a ottimizzare il tuo codice e a strutturare al meglio i tuoi stati in React.