Le state management est l’un des sujets qui génère le plus de confusion dans l’écosystème React. Context API, Zustand, Redux Toolkit, Jotai, Recoil… L’abondance d’options paralyse les juniors. La bonne nouvelle : en 2026, les choix se sont simplifiés. Ce guide vous dit exactement quoi utiliser selon la taille et la complexité de votre projet.
La règle de base : commencez local
Avant de penser « state management », posez-vous la question : est-ce que cet état doit vraiment être global ? La plupart des états n’ont pas besoin de l’être. Un formulaire, un modal ouvert/fermé, les données d’un composant — useState local suffit dans 80% des cas.
Adoptez une règle progressive :
- useState local — toujours en premier
- Props drilling — passer en props si 1-2 niveaux en dessous
- Context API — pour des données partagées peu souvent mises à jour
- Zustand ou Redux — pour des états complexes ou fréquemment mutés
Context API — pour quoi exactement
Context est fait pour des données qui ne changent pas souvent et qui doivent être accessibles partout dans l’arbre : theme, langue, utilisateur connecté, configuration.
Pourquoi ne pas tout mettre dans Context : chaque fois que la valeur du Context change, tous les composants qui le consomment se re-rendent. Pour un état qui change souvent (panier d’achat, notifications en temps réel), ça crée des problèmes de performance.
Zustand — le choix 2026 pour les projets de taille moyenne
Zustand est devenu le standard de facto pour les projets React qui ont besoin d’un state global simple sans la complexité de Redux. Son API est minimaliste :
import { create } from 'zustand'
interface CartStore {
items: CartItem[]
addItem: (item: CartItem) => void
removeItem: (id: string) => void
total: () => number
}
const useCartStore = create((set, get) => ({
items: [],
addItem: (item) => set(state => ({ items: [...state.items, item] })),
removeItem: (id) => set(state => ({ items: state.items.filter(i => i.id !== id) })),
total: () => get().items.reduce((sum, item) => sum + item.price, 0),
}))
// Dans un composant :
const { items, addItem } = useCartStore()
Avantages de Zustand : pas de Provider à configurer, subscriptions granulaires (seuls les composants qui utilisent des morceaux spécifiques du store se re-rendent), DevTools intégrées, TypeScript natif.
Redux Toolkit — quand il reste le bon choix
Redux a longtemps eu une réputation de « trop complexe ». Redux Toolkit (RTK) a simplifié l’API mais Redux reste un choix qui se justifie dans des cas spécifiques :
- Grandes applications avec des équipes nombreuses — les conventions strictes de Redux facilitent le travail en équipe
- Besoins avancés : time-travel debugging, middleware complexe, synchronisation de l’état avec le backend
- Projects avec RTK Query — excellent pour le data fetching avec cache intégré
Pour un nouveau projet seul ou en petite équipe : Zustand. Pour rejoindre un projet existant avec Redux : maîtrisez RTK, c’est omniprésent en entreprise.
React Query (TanStack Query) — le state serveur
Une distinction importante en 2026 : le state UI (modal ouvert, filtre sélectionné) vs le state serveur (données de l’API). React Query gère le state serveur — cache, synchronisation, loading/error, refetch. Combiner Zustand (state UI) + React Query (state serveur) couvre 95% des besoins sans Redux.
Offres développeur React senior et junior
Des postes pour développeurs React qui maîtrisent la gestion d’état et les patterns modernes.
À lire aussi : Hooks React — Performances React — Next.js