Le hook useReducer : Un outil puissant et sous-estimé en React 🚀

Ecrit le 24/11/2023

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 ! 💥💪✨