|
| 1 | +--- |
| 2 | +title: "Hooks fournis par React" |
| 3 | +--- |
| 4 | + |
| 5 | +<Intro> |
| 6 | + |
| 7 | +Les *Hooks* vous permettent d’utiliser différentes fonctionnalités de React au sein de vos composants. Vous pouvez utiliser les Hooks pré-fournis ou les associer pour créer les vôtres. Cette page liste tout les Hooks fournis par React. |
| 8 | + |
| 9 | +</Intro> |
| 10 | + |
| 11 | +--- |
| 12 | + |
| 13 | +## Hooks d’état local {/*state-hooks*/} |
| 14 | + |
| 15 | +*L’état local* permet à un composant de [« se souvenir » d’informations telles que des saisies utilisateur](/learn/state-a-components-memory). Par exemple, un composant formulaire peut utiliser l’état local pour stocker la valeur saisie, alors qu’un composant de galerie d’images pourra l’utiliser pour stocker l’index de l’image affichée. |
| 16 | + |
| 17 | +Pour ajouter un état local à un composant, utilisez un de ces Hooks : |
| 18 | + |
| 19 | +* [`useState`](/reference/react/useState) déclare un état local que vous pouvez mettre à jour directement. |
| 20 | +* [`useReducer`](/reference/react/useReducer) déclare un état local dont la logique de mise à jour réside dans une [fonction réducteur](/learn/extracting-state-logic-into-a-reducer). |
| 21 | + |
| 22 | +```js |
| 23 | +function ImageGallery() { |
| 24 | + const [index, setIndex] = useState(0); |
| 25 | + // ... |
| 26 | +``` |
| 27 | +
|
| 28 | +--- |
| 29 | +
|
| 30 | +## Hooks de Contexte {/*context-hooks*/} |
| 31 | +
|
| 32 | +Le *Contexte* permet à un composant [de recevoir des informations de parents éloignés sans avoir à passer par ses props](/learn/passing-props-to-a-component). Par exemple, le composant de niveau racine de votre appli peut passer le thème de l’interface utilisateur (UI) à tous les composants qu’elle contient, à quelque profondeur que ce soit. |
| 33 | +
|
| 34 | +* [`useContext`](/reference/react/useContext) s’abonne à un contexte et le lit. |
| 35 | +
|
| 36 | +```js |
| 37 | +function Button() { |
| 38 | + const theme = useContext(ThemeContext); |
| 39 | + // ... |
| 40 | +``` |
| 41 | +
|
| 42 | +--- |
| 43 | +
|
| 44 | +## Hooks de Ref {/*ref-hooks*/} |
| 45 | +
|
| 46 | +Les *Refs* permettent à un composant [de conserver certaines informations qui ne sont pas utilisées pour faire le rendu](/learn/referencing-values-with-refs), comme un nœud DOM ou un ID de timer. Contrairement à l’état local, la mise à jour d’une Ref ne déclenche pas un nouveau rendu de votre composant. Les Refs sont une « échappatoire » du paradigme de React. Elles sont utiles lorsque vous devez travailler avec des systèmes externes à React, telles que les API du navigateur web. |
| 47 | +
|
| 48 | +* [`useRef`](/reference/react/useRef) déclare une Ref. Vous pouvez y stocker n’importe quelle valeur, mais elle est le plus souvent utilisée pour référencer un nœud du DOM. |
| 49 | +
|
| 50 | +* [`useImperativeHandle`](/reference/react/useImperativeHandle) vous permet de personnaliser la Ref exposée par votre composant. Ce Hook est rarement utilisé. |
| 51 | +
|
| 52 | +```js |
| 53 | +function Form() { |
| 54 | + const inputRef = useRef(null); |
| 55 | + // ... |
| 56 | +``` |
| 57 | +
|
| 58 | +--- |
| 59 | +
|
| 60 | +## Hooks d’effets {/*effect-hooks*/} |
| 61 | +
|
| 62 | +Les *Effets* permettent à un composant [de se connecter et de se synchroniser avec des systèmes extérieurs](/learn/synchronizing-with-effects). Il peut notamment s’agir du réseau, du DOM, des animations, d’éléments d’interface écrits en utilisant une autre bibliothèque, et d’autres codes non React. |
| 63 | +
|
| 64 | +* [`useEffect`](/reference/react/useEffect) connecte un composant à un système extérieur. |
| 65 | +
|
| 66 | +```js |
| 67 | +function ChatRoom({ roomId }) { |
| 68 | + useEffect(() => { |
| 69 | + const connection = createConnection(roomId); |
| 70 | + connection.connect(); |
| 71 | + return () => connection.disconnect(); |
| 72 | + }, [roomId]); |
| 73 | + // ... |
| 74 | +``` |
| 75 | +
|
| 76 | +Les Effets sont une « échappatoire » du paradigme de React. N’utilisez pas les Effets pour orchestrer le flux de données de votre application. Si vous n’interagissez pas avec un système extérieur, [vous n’avez pas forcément besoin d’un Effet](/learn/you-might-not-need-an-effect). |
| 77 | +
|
| 78 | +Il existe deux variantes rarement utilisées de `useEffect` avec des différences de timing : |
| 79 | +
|
| 80 | +* [`useLayoutEffect`](/reference/react/useLayoutEffect) se déclenche avant que le navigateur ne repeigne l’écran. Vous pouvez y mesurer la mise en page, notamment les dimensions. |
| 81 | +* [`useInsertionEffect`](/reference/react/useInsertionEffect) se déclenche avant que React ne fasse des changements dans le DOM. Les bibliothèques peuvent y insérer des CSS dynamiques. |
| 82 | +
|
| 83 | +--- |
| 84 | +
|
| 85 | +## Les Hooks de performance {/*performance-hooks*/} |
| 86 | +
|
| 87 | +Une manière courante d’optimiser la performance de réaffichage consiste à s’épargner des tâches superflues. Par exemple, vous pouvez demander à React de réutiliser un calcul mis en cache ou d’éviter un nouveau rendu si la donnée n’a pas changé depuis le rendu précédent. |
| 88 | +
|
| 89 | +Pour éviter les calculs coûteux et les réaffichages inutiles, utilisez l’un de ces Hooks : |
| 90 | +
|
| 91 | +* [`useMemo`](/reference/react/useMemo) vous permet de mettre en cache le résultat d’un calcul coûteux. |
| 92 | +* [`useCallback`](/reference/react/useCallback) vous permet de mettre en cache la définition d’une fonction avant de la passer à un composant optimisé. |
| 93 | +
|
| 94 | +```js |
| 95 | +function TodoList({ todos, tab, theme }) { |
| 96 | + const visibleTodos = useMemo(() => filterTodos(todos, tab), [todos, tab]); |
| 97 | + // ... |
| 98 | +} |
| 99 | +``` |
| 100 | +
|
| 101 | +Parfois, vous ne pouvez pas éviter le réaffichage parce que la vue doit effectivement être mise à jour. Dans ce cas, vous pouvez améliorer la performance en séparant les mises à jour bloquantes qui doivent être synchrones (comme la gestion d’une saisie dans un champ) des mises à jour non bloquantes, qui ne gèlent pas le traitement de l’interface (comme la mise à jour d’un graphique). |
| 102 | +
|
| 103 | +Pour établir des priorités de rendu, utilisez un de ces Hooks : |
| 104 | +
|
| 105 | +* [`useTransition`](/reference/react/useTransition) permet de marquer une transition d’état local comme non bloquante ce qui autorise d’autres mises à jour à l’interrompre. |
| 106 | +* [`useDeferredValue`](/reference/react/useDeferredValue) vous permet de différer la mise à jour d’une partie non critique de l’UI et de laisser les autres parties se mettre à jour en premier. |
| 107 | +
|
| 108 | +--- |
| 109 | +
|
| 110 | +## Les Hooks de gestion de ressources {/*resource-hooks*/} |
| 111 | +
|
| 112 | +Un composant peut accéder à des *ressources* sans qu'elles fassent partie de son état. Un composant peut par exemple lire un message depuis une promesse, ou lire des informations de styles depuis un contexte. |
| 113 | +
|
| 114 | +Pour lire une valeur depuis une ressource, utilisez ce Hook : |
| 115 | +
|
| 116 | +- [`use`](/reference/react/use) vous permet de lire une valeur depuis une ressource telle qu'une [promesse](https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Promise) (`Promise`) ou un [contexte](/learn/passing-data-deeply-with-context). |
| 117 | +
|
| 118 | +```js |
| 119 | +function MessageComponent({ messagePromise }) { |
| 120 | + const message = use(messagePromise); |
| 121 | + const theme = use(ThemeContext); |
| 122 | + // ... |
| 123 | +} |
| 124 | +``` |
| 125 | +
|
| 126 | +--- |
| 127 | +
|
| 128 | +## Autres Hooks {/*other-hooks*/} |
| 129 | +
|
| 130 | +Ces Hooks sont majoritairement utiles aux auteur·e·s de bibliothèque et ne sont pas couramment utilisés dans du code applicatif. |
| 131 | +
|
| 132 | +* [`useDebugValue`](/reference/react/useDebugValue) vous permet de personnaliser le libellé que les outils de développement React affichent pour votre propre Hook. |
| 133 | +* [`useId`](/reference/react/useId) permet à un composant de s’associer un ID unique. Généralement utilisé avec les API d’accessibilité. |
| 134 | +* [`useSyncExternalStore`](/reference/react/useSyncExternalStore) permet à un composant de s’abonner à une source de données extérieure. |
| 135 | +
|
| 136 | +--- |
| 137 | +
|
| 138 | +## Vos propres Hooks {/*your-own-hooks*/} |
| 139 | +
|
| 140 | +Vous pouvez [définir vos propres Hooks personnalisés](/learn/reusing-logic-with-custom-hooks#extracting-your-own-custom-hook-from-a-component) au moyen de fonctions JavaScript. |
0 commit comments