ReactDébutant8 min de lecture

Introduction aux hooks React personnalisés

Apprenez à créer vos propres hooks pour réutiliser la logique métier.

NG

Next Gen Dev

14 septembre 2025

Retour au blogMe contacter
  • React
  • Hooks
  • JavaScript

A retenir

Apprenez à créer vos propres hooks pour réutiliser la logique métier.

Qu'est-ce qu'un hook personnalisé ?

Un hook personnalisé est une fonction JavaScript qui commence par "use" et peut appeler d'autres hooks. C'est un moyen puissant de réutiliser la logique entre composants.

Exemple simple : useCounter

function useCounter(initialValue = 0) {
  const [count, setCount] = useState(initialValue);
  
  const increment = () => setCount(c => c + 1);
  const decrement = () => setCount(c => c - 1);
  const reset = () => setCount(initialValue);
  
  return { count, increment, decrement, reset };
}

Utilisation

function Counter() {
  const { count, increment, decrement, reset } = useCounter(0);
  
  return (
    <div>
      <p>Count: {count}</p>
      <button onClick={increment}>+</button>
      <button onClick={decrement}>-</button>
      <button onClick={reset}>Reset</button>
    </div>
  );
}

Hook plus avancé : useLocalStorage

function useLocalStorage<T>(key: string, initialValue: T) {
  const [storedValue, setStoredValue] = useState<T>(() => {
    try {
      const item = window.localStorage.getItem(key);
      return item ? JSON.parse(item) : initialValue;
    } catch (error) {
      return initialValue;
    }
  });

  const setValue = (value: T | ((val: T) => T)) => {
    try {
      const valueToStore = value instanceof Function ? value(storedValue) : value;
      setStoredValue(valueToStore);
      window.localStorage.setItem(key, JSON.stringify(valueToStore));
    } catch (error) {
      console.log(error);
    }
  };

  return [storedValue, setValue] as const;
}

Hook useApi pour les appels réseau

function useApi<T>(url: string) {
  const [data, setData] = useState<T | null>(null);
  const [loading, setLoading] = useState(true);
  const [error, setError] = useState<Error | null>(null);

  useEffect(() => {
    const fetchData = async () => {
      try {
        setLoading(true);
        const response = await fetch(url);
        if (!response.ok) throw new Error('Network error');
        const result = await response.json();
        setData(result);
      } catch (err) {
        setError(err as Error);
      } finally {
        setLoading(false);
      }
    };

    fetchData();
  }, [url]);

  return { data, loading, error };
}

Hook useDebounce pour optimiser les performances

function useDebounce<T>(value: T, delay: number): T {
  const [debouncedValue, setDebouncedValue] = useState<T>(value);

  useEffect(() => {
    const handler = setTimeout(() => {
      setDebouncedValue(value);
    }, delay);

    return () => {
      clearTimeout(handler);
    };
  }, [value, delay]);

  return debouncedValue;
}

Bonnes pratiques

1. Nommage cohérent

  • Toujours commencer par "use"
  • Nom descriptif de la fonctionnalité

2. Séparation des responsabilités

  • Un hook = une responsabilité
  • Composer plusieurs hooks simples

3. Tests unitaires

import { renderHook, act } from '@testing-library/react';
import { useCounter } from './useCounter';

test('should increment counter', () => {
  const { result } = renderHook(() => useCounter());
  
  act(() => {
    result.current.increment();
  });
  
  expect(result.current.count).toBe(1);
});

Les hooks personnalisés sont essentiels pour un code React propre et réutilisable !

Sommaire

Intentions de recherche

Requetes ciblees et recherches associees

Ces formulations aident a couvrir des variantes de recherche proches du sujet principal, y compris des requetes longues traines.

  • comment hooks react personnalises ?
  • guide react

Mot-cle principal

guide react

Variantes: React, Hooks, JavaScript, hooks react personnalises

FAQ SEO

Questions frequentes autour du sujet

Que couvre cet article sur guide react ?

Cet article synthese des actions concretes, des points de vigilance et des priorites d execution pour passer plus vite de la theorie a la mise en place.

Suite logique

Transformer ce sujet en plan d action

Si tu veux appliquer ce que tu viens de lire a ton site (SEO, conversion, structure de contenu, automatisation), je peux t aider a prioriser les actions utiles.

Maillage interne

Articles similaires

Voir tous les articles