We want to hear from you!Take our 2021 Community Survey!
This site is no longer updated.Go to react.dev

Introduction aux Hooks

These docs are old and won’t be updated. Go to react.dev for the new React docs.

These new documentation pages teach React with Hooks:

Les Hooks sont arrivĂ©s avec React 16.8. Ils vous permettent de bĂ©nĂ©ficier d’un Ă©tat local et d’autres fonctionnalitĂ©s de React sans avoir Ă  Ă©crire une classe.

import React, { useState } from 'react';

function Example() {
  // DĂ©clare une nouvelle variable d'Ă©tat, qu’on va appeler « count »  const [count, setCount] = useState(0);
  return (
    <div>
      <p>Vous avez cliqué {count} fois</p>
      <button onClick={() => setCount(count + 1)}>
        Cliquez ici
      </button>
    </div>
  );
}

Cette nouvelle fonction useState est le premier « Hook Â» que nous allons explorer, mais cet exemple est juste un petit aperçu. Ne vous inquiĂ©tez pas si vous n’y comprenez rien pour le moment, ça va venir vite !

Vous pouvez commencer à apprendre les Hooks à la page suivante. Dans celle-ci, nous vous expliquons pourquoi nous avons ajouté les Hooks à React et comment ils vous aideront à écrire des applications géniales.

Remarque

Les Hooks sont apparus dans React 16.8.0. Lors de la mise à jour de React, n’oubliez pas de mettre à jour tous les modules, dont React DOM.

React Native prend en charge les Hooks depuis sa version 0.59.

Vidéo de présentation

Lors de la React Conf 2018, Sophie Alpert et Dan Abramov ont prĂ©sentĂ© les Hooks, suivis de Ryan Florence qui a montrĂ© comment refactoriser une application pour les utiliser. Regardez la vidĂ©o ici :


Pas de rupture de compatibilité

Avant de continuer, remarquez bien que les hooks sont :

  • ComplĂštement optionnels. Vous pouvez essayer les Hooks dans quelques composants sans réécrire le code existant. Mais vous n’avez pas Ă  apprendre et utiliser les Hooks dĂšs maintenant si vous ne le souhaitez pas.
  • 100% rĂ©tro-compatibles. Les Hooks prĂ©servent la compatibilitĂ© ascendante.
  • Disponibles maintenant. Les Hooks sont disponibles depuis la version 16.8.0.

Les classes en React ne sont pas menacĂ©es. Vous pouvez en apprendre davantage sur la stratĂ©gie d’adoption progressive des Hooks en bas de cette page.

Les Hooks n’invalident pas vos connaissances des concepts de React. Les Hooks fournissent plutĂŽt une API plus directe pour les concepts React que vous connaissez dĂ©jĂ  : props, Ă©tat local, contexte, refs et cycle de vie. Comme nous le verrons plus tard, les Hooks offrent Ă©galement un nouveau moyen puissant de les combiner.

Si vous voulez juste commencer Ă  apprendre les Hooks, n’hĂ©sitez pas Ă  aller directement Ă  la page suivante ! Vous pouvez Ă©galement continuer Ă  lire cette page pour en apprendre davantage sur les raisons pour lesquelles nous ajoutons les Hooks et sur la façon dont nous allons commencer Ă  les utiliser sans réécrire nos applications.

Raisons

Les Hooks rĂ©solvent une grande variĂ©tĂ© de problĂšmes apparemment sans rapports en React, que nous avons rencontrĂ©s pendant cinq ans d’écriture et de maintenance de dizaines de milliers de composants. Que vous appreniez React, l’utilisiez quotidiennement ou prĂ©fĂ©riez une bibliothĂšque diffĂ©rente avec un modĂšle de composants similaire, vous pourriez reconnaĂźtre certains de ces problĂšmes.

Il est difficile de réutiliser la logique à état entre les composants

React n’offre aucun moyen « d’attacher Â» un comportement rĂ©utilisable Ă  un composant (par exemple, le connecter Ă  un Ă©tat applicatif). Si vous utilisez dĂ©jĂ  React depuis quelques temps, vous avez peut-ĂȘtre dĂ©jĂ  rencontrĂ© les props de rendu et les composants d’ordre supĂ©rieur qui tentent d’apporter une solution. Mais ces approches exigent la restructuration de vos composants lorsque vous les utilisez, ce qui rend le code plus lourd et difficile Ă  maintenir.

Si vous examinez une application React typique dans les React DevTools, vous verrez un vĂ©ritable « enfer d’enrobage Â» de composants perdus dans des couches de fournisseurs et consommateurs de contexte, composants d’ordre supĂ©rieur, props de rendu et autres abstractions. On pourrait les filtrer dans les DevTools, mais ils sont symptomatiques d’un problĂšme plus profond : React a besoin d’une meilleure primitive pour la rĂ©utilisation des logiques Ă  Ă©tat.

Avec les Hooks, vous pouvez extraire la logique Ă  Ă©tat d’un composant pour la rĂ©utiliser et la tester de façon indĂ©pendante. Les Hooks vous permettent de rĂ©utiliser de la logique Ă  Ă©tat sans modifier la hiĂ©rarchie de vos composants. Ça facilite le partage des Hooks entre plusieurs composants, voire avec la communautĂ©.

Nous parlerons de ça plus en détail dans Construire vos propres Hooks.

Les composants complexes deviennent difficiles Ă  comprendre

Nous avons souvent dĂ» maintenir des composants qui Ă©taient simples au dĂ©part, pour devenir d’ingĂ©rables ramassis de logiques Ă  Ă©tat et d’effets de bord. Chaque mĂ©thode de cycle de vie contient un mĂ©lange de logiques sans aucun rapport. Par exemple, des composants peuvent charger des donnĂ©es dans les mĂ©thodes componentDidMount et componentDidUpdate. Toutefois, cette mĂȘme mĂ©thode componentDidMount pourrait contenir d’autres logiques dĂ©diĂ©es Ă  la configuration d’écouteurs d’évĂ©nements, qui seront Ă  leur tour nettoyĂ©s dans la mĂ©thode componentWillUnmount.

Le code mutuellement liĂ© dont les Ă©volutions doivent rester cohĂ©rentes est divisĂ© en plusieurs parties, alors que du code sans rapport finit par ĂȘtre combinĂ© en une seule mĂ©thode. Ça ouvre grand la porte Ă  l’introduction de bugs et incohĂ©rences.

Il est frĂ©quemment impossible de dĂ©couper ces composants en d’autres plus petits, car la logique Ă  Ă©tat est Ă©parpillĂ©e. Ils sont Ă©galement difficiles Ă  tester. C’est la raison pour laquelle de nombreux utilisateurs de React prĂ©fĂšrent l’associer Ă  une bibliothĂšque externe de gestion d’état applicatif. Toutefois, ça rajoute souvent encore davantage d’abstraction et vous oblige Ă  jouer entre les fichiers, ce qui complexifie la rĂ©utilisation de ces composants.

Pour mettre un terme Ă  ces soucis, les Hooks vous permettent de dĂ©couper un composant en petites fonctions basĂ©es sur les parties qui sont intrinsĂšquement liĂ©es (comme la configuration d’un abonnement ou le chargement de donnĂ©es), plutĂŽt que de forcer leur dĂ©coupe sur base des mĂ©thodes de cycle de vie. Il est aussi possible de gĂ©rer l’état local d’un composant avec un rĂ©ducteur, pour le rendre plus prĂ©visible.

Nous verrons tout ça plus en dĂ©tail dans Utiliser le Hook d’effet.

Les classes sont déroutantes pour les gens comme pour les machines

En plus de rendre plus difficiles la rĂ©utilisation et l’organisation du code, nous avons remarquĂ© que les classes peuvent constituer une barriĂšre significative Ă  l’apprentissage de React. Vous devez comprendre comment this fonctionne en JavaScript, d’une façon trĂšs diffĂ©rente de la plupart des langages. Vous devez vous souvenir de lier les gestionnaires d’évĂ©nements. Sans certaines propositions de syntaxes encore instables, le code est trĂšs verbeux. Les gens peuvent parfaitement comprendre les props, l’état local, et le flux de donnĂ©es descendant mais lutter nĂ©anmoins avec les classes. La distinction entre fonctions composants et composants Ă  base de classes, ainsi que les situations oĂč leur usage respectif est appropriĂ©, conduisent Ă  des dĂ©saccords mĂȘme entre dĂ©veloppeurs React expĂ©rimentĂ©s.

En outre, React est sorti il y a environ cinq ans, et nous voulons nous assurer qu’il reste pertinent pour les cinq prochaines annĂ©es. Comme Svelte, Angular, Glimmer, et d’autres l’ont montrĂ©, la compilation anticipĂ©e de composants recĂšle un fort potentiel, surtout si elle ne se limite pas aux gabarits. RĂ©cemment, nous avons expĂ©rimentĂ© autour du component folding en utilisant Prepack, et les premiers rĂ©sultats sont encourageants. Toutefois, nous avons constatĂ© que les composants Ă  base de classes peuvent encourager des approches involontaires qui empĂȘchent de telles optimisations. Les classes prĂ©sentent aussi des problĂšmes pour l’outillage actuel. Par exemple, les classes ne sont pas efficacement minifiĂ©es, et elles rendent le rechargement Ă  chaud peu fiable. Nous voulons prĂ©senter une API qui permet au code de rester plus aisĂ©ment optimisable.

Pour rĂ©soudre ces problĂšmes, les Hooks nous permettent d’utiliser davantage de fonctionnalitĂ©s de React sans recourir aux classes. Conceptuellement, les composants React ont toujours Ă©tĂ© proches des fonctions. Les Hooks tirent pleinement parti des fonctions, sans sacrifier l’esprit pratique de React. Les Hooks donnent accĂšs Ă  des Ă©chappatoires impĂ©ratives et ne vous obligent pas Ă  apprendre des techniques complexes de programmation fonctionnelle ou rĂ©active..

Exemples

L’aperçu des Hooks est un bon moyen de commencer à apprendre les Hooks.

StratĂ©gie d’adoption progressive

TL;DR : nous n’avons aucune intention de retirer les classes de React.

Nous savons que les dĂ©veloppeurs React se concentrent sur la sortie de leurs produits et n’ont pas le temps d’explorer chaque nouvelle API qui sort. Les Hooks sont tout nouveaux, et il serait peut-ĂȘtre sage d’attendre que davantage d’exemples et de tutoriels soient disponibles avant d’envisager de les apprendre ou de les adopter.

Nous comprenons aussi que la barre pour ajouter une nouvelle primitive Ă  React est extrĂȘmement haute. Pour les lecteurs curieux, nous avons prĂ©parĂ© une RFC dĂ©taillĂ©e qui explore plus en dĂ©tail les raisons derriĂšre les Hooks, et fournit une perspective supplĂ©mentaire sur certaines dĂ©cisions de conception et sur des sources d’inspiration.

Point trĂšs important : les Hooks fonctionnent cĂŽte Ă  cĂŽte avec du code existant, vous pouvez donc les adopter progressivement. Il n’y a aucune raison pressante de migrer vers les Hooks. Nous conseillons d’éviter les « réécritures intĂ©grales Â», en particulier pour les composants existants complexes Ă  base de classes. Il faut ajuster un peu son modĂšle mental pour commencer Ă  « penser en Hooks Â». À en croire notre expĂ©rience, il vaut mieux s’habituer aux Hooks dans de nouveaux composants non-critiques, et s’assurer que toutes les personnes de l’équipe sont Ă  l’aise avec. AprĂšs avoir essayĂ© les Hooks, n’hĂ©sitez pas Ă  nous faire vos retours, qu’ils soient positifs ou nĂ©gatifs.

Nous voulons que les Hooks couvrent tout les cas d’usages des classes, mais nous continuerons Ă  prendre en charge les composants Ă  base de classes jusqu’à nouvel ordre. Chez Facebook, nous avons des dizaines de milliers de composants Ă©crit en tant que classes, et nous n’avons absolument pas l’intention de les réécrire. Au lieu de ça, nous avons commencĂ© Ă  utiliser les Hooks dans le nouveau code, cĂŽte Ă  cĂŽte avec les classes.

Questions fréquemment posées

Nous avons préparé une FAQ des Hooks qui répond aux questions les plus couramment posées sur les Hooks.

Prochaines étapes

Arrivé·e sur cette fin de page, vous devriez avoir une idĂ©e plus claire des problĂšmes rĂ©solus par les Hooks, mais de nombreux dĂ©tails restent sans doute obscurs. Ne vous en faites pas ! En route pour la page suivante, dans laquelle nous commencerons Ă  apprendre les Hooks par l’exemple.

Avez-vous trouvĂ© cette page utile ?Modifier cette page