Dans le développement d’applications React, le hook useReducer
est un outil extrêmement utile mais souvent sous-estimé. Il offre une approche alternative pour gérer l’état de nos composants, offrant ainsi plus de flexibilité et de contrôle. Dans cet article, nous allons explorer pourquoi le hook useReducer
est si puissant et comment l’utiliser en combinaison avec Jotai pour partager l’état entre plusieurs composants.
Pourquoi utiliser useReducer?
✅ Gestion d’état plus complexe : Alors que le hook useState
est parfait pour gérer des états simples, le hook useReducer
est conçu pour gérer des états plus complexes et des logiques de mise à jour avancées. Il est idéal lorsque vous avez des états qui nécessitent des transitions entre différentes valeurs ou lorsque vous avez besoin de logiques de mise à jour plus élaborées.
✅ Séparation de la logique d’état : Le hook useReducer
permet de séparer la logique d’état de votre composant, ce qui rend votre code plus modulaire et plus facilement testable. Vous pouvez définir votre fonction de réduction (reducer) en dehors de votre composant et l’utiliser avec useReducer
pour mettre Ă jour votre Ă©tat en fonction des actions.
âś… Meilleure gestion des mises Ă jour : Avec useReducer
, vous pouvez gérer finement les mises à jour de votre état en fonction des actions spécifiques. Cela signifie que vous pouvez éviter les rendus inutiles et optimiser les performances de votre application en ne mettant à jour que les composants concernés.
Exemple d’utilisation de useReducer
Voici un exemple simple pour illustrer la puissance du hook useReducer
:
import React, { useReducer } from 'react';
const initialState = {
count: 0,
};
function reducer(state, action) {
switch (action.type) {
case 'increment':
return { ...state, count: state.count + 1 };
case 'decrement':
return { ...state, count: state.count - 1 };
default:
throw new Error();
}
}
function Counter() {
const [state, dispatch] = useReducer(reducer, initialState);
return (
<div>
<p>Count: {state.count}</p>
<button onClick={() => dispatch({ type: 'increment' })}>Increment</button>
<button onClick={() => dispatch({ type: 'decrement' })}>Decrement</button>
</div>
);
}
Dans cet exemple, nous avons un état initial avec une propriété count
. La fonction reducer
gère les différentes actions (increment
et decrement
) pour mettre à jour l’état en conséquence. Ensuite, nous utilisons useReducer
pour créer notre état et notre fonction de dispatch, que nous utilisons pour envoyer des actions pour mettre à jour l’état.
Combinaison de useReducer et Jotai
Maintenant que nous comprenons la puissance de useReducer
, voyons comment l’utiliser avec Jotai pour partager l’état entre plusieurs composants :
import { atom, useAtom } from 'jotai';
const countAtom = atom(0);
function Counter() {
const [count, dispatch] = useAtom(countAtom);
const increment = () => dispatch({ type: 'increment' });
const decrement = () => dispatch({ type: 'decrement' });
return (
<div>
<p>Count: {count}</p>
<button onClick={increment}>Increment</button>
<button onClick={decrement}>Decrement</button>
</div>
);
}
function AnotherComponent() {
const [count] = useAtom(countAtom);
return (
<div>
<p>Count from AnotherComponent: {count}</p>
</div>
);
}
Dans cet exemple, nous utilisons useAtom
de Jotai pour accéder à notre atome countAtom
. Nous pouvons Ă©galement utiliser useAtom
dans le composant AnotherComponent
pour afficher la valeur de l’état. Les actions pour mettre à jour l’état sont envoyées via le dispatch
fourni par Jotai.
Conclusion
Le hook useReducer
est un outil puissant et sous-estimé en React. Il offre une meilleure gestion des états complexes, permet de séparer la logique d’état et offre une plus grande flexibilité dans les mises à jour. Lorsqu’il est combiné avec Jotai, il permet de partager facilement l’état entre plusieurs composants. Essayez d’utiliser useReducer
dans votre prochaine application React et découvrez la puissance de la gestion de l’état ! 💥💪✨