reactjsday 2025 in pillole #3 — State management: ogni stato al suo posto

Local, global e server state: dare a ogni stato lo scope giusto, evitare il prop drilling e smettere di abusare di useEffect

Terza pillola dal reactjsday 2025, e siamo su uno dei temi eterni di React: lo state management. O meglio: dare a ogni stato lo scope che merita.

La pillola

Il framing del talk è semplice e sano. Gli stati sono di tre tipi, e ognuno ha i suoi problemi e le sue soluzioni:

Il secondo asse è la distinzione Smart Components vs Presentation (dumb) Components. Un esempio del pattern che il talk bollava come da evitare:

// ❌ 10+ props, una per campo, una callback per campo
function UserProfile({ name, email, avatar, bio, location,
                       onNameChange, onEmailChange, onBioChange }) {
  return <input value={name} onChange={onNameChange} /> /* ... */
}

E la versione sana: il componente smart possiede lo stato e lo aggiorna per chiave, il componente di presentazione riceve i dati e non ha stato interno — al massimo stato derivato dalle props:

// ✓ lo smart component possiede lo stato
function UserProfile({ userId }) {
  const [profile, setProfile] = useState(initialProfile)
  const updateField = (field, value) =>
    setProfile(prev => ({ ...prev, [field]: value }))
  return <input value={profile.name}
                onChange={(e) => updateField('name', e.target.value)} />
}

La regola d’oro sui presentation component: niente useEffect per “sincronizzare” lo stato con le props — lo stato di un componente di presentazione si deriva dalle props, punto. E se la logica di derivazione cresce troppo, è il segnale che il componente va spezzato.

Il takeaway

Prima di chiedersi “quale libreria di state management?”, chiedersi “di che scope è questo stato?”. La metà dei problemi di stato in React sono in realtà problemi di design dei componenti.


Prossima pillola: modularizzare per scalare a 15+ team.

#pillole#reactjsday#react#state-management#architettura

‹ Tutti gli articoli