Menu

Les hooks React : chaque hook expliqué en exemples

Un hook est une fonction dont le nom commence par use et qui permet à un composant d'utiliser une fonctionnalité de React comme l'état, le contexte, les refs ou les effets. Découvrez chaque hook intégré regroupé par usage, les deux règles que suit tout hook, et comment écrire le vôtre.

Cette page contient des éditeurs exécutables - modifiez, exécutez et voyez la sortie instantanément.

Les hooks React sont des fonctions dont le nom commence par use et qui permettent à un composant fonction d'utiliser les fonctionnalités de React : useState pour mémoriser une valeur, useEffect pour exécuter du code après le rendu, useRef pour garder un nœud DOM, useContext pour lire des données partagées. Vous les appelez en haut de votre composant, et React conserve leurs valeurs d'un rendu à l'autre.

Quatre hooks travaillent ensemble ici. useState stocke le texte, useRef pointe vers le champ pour que le bouton puisse lui donner le focus, useMemo garde la liste filtrée jusqu'à ce que la recherche change, et useEffect écrit dans la console après chaque rendu où la recherche a changé. Tapez an et regardez la console : une ligne par frappe, après la mise à jour de la liste.

Pourquoi les hooks existent

Avant React 16.8, un composant qui avait besoin d'un état ou d'un code de cycle de vie devait être une classe. La logique d'une même fonctionnalité était répartie entre componentDidMount, componentDidUpdate et componentWillUnmount, et la partager entre composants passait par des mixins (qui n'ont jamais fonctionné avec la syntaxe des classes), des higher order components ou des render props, qui enveloppaient tous votre arbre dans des couches supplémentaires.

// The class way: one feature, three methods
class Clock extends React.Component {
    state = { now: new Date() };
    componentDidMount() {
        this.id = setInterval(() => this.setState({ now: new Date() }), 1000);
    }
    componentWillUnmount() {
        clearInterval(this.id);
    }
    render() {
        return <p>{this.state.now.toLocaleTimeString()}</p>;
    }
}

Avec les hooks, la même fonctionnalité vit au même endroit : l'effet démarre le minuteur et son nettoyage l'arrête.

Masquez l'horloge et la console affiche timer stopped : React a exécuté le nettoyage quand Clock a quitté l'écran. Affichez-la à nouveau et un nouveau minuteur démarre. Les composants classes fonctionnent toujours dans React 19, mais le nouveau code utilise les hooks.

Tous les hooks intégrés

React 19.2 regroupe ses hooks selon ce qu'ils apportent à un composant. Vous utiliserez les deux premiers groupes tous les jours, et les autres quand un problème précis l'exige.

HookCe qu'il vous apportePage
useStateUne valeur qui survit aux rendus et un setter qui refait le renduuseState
useReducerUn état mis à jour par une fonction reducer et des actions envoyéesuseReducer
useContextUne valeur fournie par un parent, sans passer de propsuseContext
useRefUne boîte modifiable qui survit aux rendus, souvent un nœud DOMuseRef
useImperativeHandleChoisit ce qu'un parent voit à travers votre refforwardRef
useEffectDu code qui s'exécute en général après l'affichage : minuteurs, abonnements, récupération de donnéesuseEffect
useLayoutEffectDu code qui s'exécute après la mise à jour du DOM mais avant l'affichageuseLayoutEffect
useInsertionEffectS'exécute avant les effets de layout, pour les bibliothèques CSS-in-JS
useEffectEventUne fonction qu'un effet peut appeler et qui voit toujours les dernières props et le dernier étatuseEffect
useMemoMet en cache une valeur calculée entre les rendususeMemo
useCallbackMet en cache une fonction entre les rendususeCallback
useTransitionMarque une mise à jour comme non urgente et vous indique quand elle est en attenteuseTransition
useDeferredValueUne copie d'une valeur qui prend du retard pendant les rendus lourdsuseDeferredValue
useIdUn identifiant unique identique sur le serveur et le clientuseId
useSyncExternalStoreS'abonne à un store qui vit hors de ReactuseSyncExternalStore
useDebugValueUn libellé pour un hook personnalisé dans React DevTools
useLit une promesse ou un contexte, et peut se trouver dans une conditionuse
useActionStateUn état mis à jour par une action de formulaire, avec un indicateur d'attenteuseActionState
useOptimisticAffiche le résultat attendu avant la réponse du serveuruseOptimistic
useFormStatusL'état d'attente du formulaire parent (depuis react-dom)

use, useActionState, useOptimistic et useFormStatus sont arrivés avec React 19, et useEffectEvent est devenu stable dans la 19.2. Tous les autres hooks de la liste fonctionnent aussi dans React 18.

L'état provoque des rendus, les refs non

Tous les hooks ne déclenchent pas un rendu. useState et useReducer, si : modifiez leur valeur et React redessine le composant. useRef vous donne un objet dont vous pouvez modifier librement le champ current, et React ne refait jamais de rendu à cause de lui. C'est donc le bon endroit pour un identifiant de minuteur, une valeur précédente ou un compteur que l'écran n'affiche pas.

useReducer contient le panier et useState contient la note ; les deux provoquent un rendu quand ils changent, et l'effet écrit une ligne par rendu. L'effet modifie aussi commits.current, mais ce changement ne provoque jamais de rendu à lui seul, donc la console ne boucle pas. Le compteur est mis à jour dans un effet plutôt que dans le corps du composant, car le corps ne doit rien modifier pendant le rendu.

Les règles des hooks

Chaque hook suit deux règles :

  1. Appelez les hooks au niveau supérieur de votre composant, jamais dans une condition, une boucle ou une fonction imbriquée.
  2. Appelez les hooks uniquement depuis des composants fonctions ou depuis vos propres hooks personnalisés.

React ne reconnaît pas les hooks par leur nom. Il les reconnaît par l'ordre dans lequel vous les appelez, et il attend que cet ordre soit le même à chaque rendu. Un hook dans un if décalerait tous les hooks suivants. La page sur les règles des hooks montre ce qui casse et comment le corriger. use est la seule exception : il peut être appelé dans une condition.

Votre premier hook personnalisé

Quand deux composants ont besoin de la même logique avec état, déplacez-la dans une fonction dont le nom commence par use. Cette fonction peut appeler n'importe quel autre hook. Chaque composant qui l'appelle obtient son propre état.

Les deux compteurs utilisent le même hook, mais cliquer sur l'un laisse l'autre tranquille : un hook personnalisé partage la logique, pas l'état. Ajoutez une fonction decrement à useCounter et un bouton qui l'appelle, et les deux compteurs en profitent d'un coup. D'autres patterns (useToggle, useDebounce, useLocalStorage) se trouvent sur la page des hooks personnalisés.

Quel hook choisir

  • L'écran doit changer quand une valeur change : useState, ou useReducer quand de nombreux événements modifient le même état.
  • Vous devez communiquer avec quelque chose d'extérieur à React (un minuteur, un abonnement, une requête) : useEffect.
  • Vous avez besoin d'un nœud DOM ou d'une valeur que l'écran n'affiche pas : useRef.
  • De nombreux composants profonds dans l'arbre ont besoin de la même valeur : useContext.
  • Un rendu est lent à cause d'un calcul ou parce qu'un enfant mémoïsé refait son rendu : useMemo et useCallback. React Compiler peut ajouter cette mémoïsation pour vous, mais l'écrire à la main fonctionne toujours et reste courant.
  • La saisie semble lente parce que la mise à jour qui la suit est lourde : useTransition ou useDeferredValue.

Questions fréquentes

Que sont les hooks dans React ?

Les hooks sont des fonctions dont le nom commence par use et qui permettent à un composant fonction d'utiliser les fonctionnalités de React : useState pour l'état, useEffect pour les effets de bord, useContext pour le contexte, useRef pour des valeurs qui survivent aux rendus sans en provoquer, et d'autres.

Pourquoi les hooks ont-ils été ajoutés à React ?

Avant les hooks (React 16.8), l'état et les méthodes de cycle de vie n'existaient que dans les composants classes, et partager une logique avec état nécessitait des mixins, des higher order components ou des render props. Les hooks placent cette logique dans de simples fonctions que vous pouvez appeler depuis n'importe quel composant fonction et partager sous forme de hooks personnalisés.

Combien de hooks React possède-t-il ?

React 19.2 fournit une vingtaine de hooks intégrés dans le paquet react, plus useFormStatus dans react-dom. La plupart des applications en utilisent quelques-uns au quotidien : useState, useEffect, useRef, useContext, useMemo et useCallback.

Peut-on utiliser des hooks dans des composants classes ?

Non. Les hooks ne fonctionnent que dans les composants fonctions et dans d'autres hooks. Vous pouvez toujours afficher un composant classe à côté de composants fonctions, et une classe peut afficher un composant fonction qui utilise des hooks.

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

Votre propre fonction dont le nom commence par use et qui appelle d'autres hooks. Elle permet à plusieurs composants de réutiliser la même logique avec état, tandis que chaque composant qui l'appelle obtient son propre état séparé.

Illustration des langages de programmation de Coddy

Apprendre à coder avec Coddy

COMMENCER