You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: content/docs/hooks-rules.md
+11-11Lines changed: 11 additions & 11 deletions
Original file line number
Diff line number
Diff line change
@@ -8,15 +8,15 @@ prev: hooks-effect.html
8
8
9
9
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.
10
10
11
-
Les Hooks sont des fonctions JavaScript, mais vous devez suivre deux règles lorsque vous les utilisez. Nous mettons à votre disposition un [plugin de *linter*](https://www.npmjs.com/package/eslint-plugin-react-hooks) pour vérifier ces règles automatiquement:
11
+
Les Hooks sont des fonctions JavaScript, mais vous devez suivre deux règles lorsque vous les utilisez. Nous mettons à votre disposition un [plugin de *linter*](https://www.npmjs.com/package/eslint-plugin-react-hooks) pour vérifier ces règles automatiquement:
12
12
13
13
### Appelez les Hooks uniquement au niveau racine {#only-call-hooks-at-the-top-level}
14
14
15
-
**N'appelez pas de Hooks à l'intérieur de boucles, de code conditionnel ou de fonctions imbriquées.** Au lieu de ça, utilisez seulement les Hooks au niveau racine de votre fonction React. En suivant cette règle, vous garantissez que les Hooks sont appelés dans le même ordre à chaque fois affichage du composant. C'est ce qui permet à React de garantir le bon état des Hooks entre plusieurs appels à `useState` et `useEffect`. (Si vous êtes curieux·se, nous expliquerons ça en détail [ci-dessous](#explanation).)
15
+
**N'appelez pas de Hooks à l'intérieur de boucles, de code conditionnel ou de fonctions imbriquées.** Au lieu de ça, utilisez seulement les Hooks au niveau racine de votre fonction React. En suivant cette règle, vous garantissez que les Hooks sont appelés dans le même ordre à chaque affichage du composant. C'est ce qui permet à React de garantir le bon état des Hooks entre plusieurs appels à `useState` et `useEffect`. (Si vous êtes curieux·se, nous expliquerons ça en détail [plus bas](#explanation).)
16
16
17
17
### Appelez les Hooks uniquement depuis des fonctions React {#only-call-hooks-from-react-functions}
18
18
19
-
**N'appelez pas les Hooks depuis des fonctions JavaScript classiques.** Vous pouvez en revanche:
19
+
**N'appelez pas les Hooks depuis des fonctions JavaScript classiques.** Vous pouvez en revanche:
20
20
21
21
* ✅ Appeler les Hooks depuis des fonctions composants React.
22
22
* ✅ Appeler les Hooks depuis des Hooks personnalisés (nous aborderons le sujet [dans la prochaine page](/docs/hooks-custom.html)).
@@ -25,7 +25,7 @@ En suivant cette règle, vous garantissez que toute la logique d’état d’un
25
25
26
26
## Plugin ESLint {#eslint-plugin}
27
27
28
-
Nous avons publié un plugin ESLint appelé [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks) qui assure le respect de ces deux règles. Vous pouvez ajouter ce plugin à votre projet si vous souhaitez l'utiliser:
28
+
Nous avons publié un plugin ESLint appelé [`eslint-plugin-react-hooks`](https://www.npmjs.com/package/eslint-plugin-react-hooks) qui assure le respect de ces deux règles. Vous pouvez ajouter ce plugin à votre projet si vous souhaitez l'utiliser:
Comme nous l'avons [appris plus tôt](/docs/hooks-state.html#tip-using-multiple-state-variables), nous pouvons utiliser plusieurs Hooks *State* ou *Effect* au sein d'un même composant:
54
+
Comme nous l'avons [appris plus tôt](/docs/hooks-state.html#tip-using-multiple-state-variables), nous pouvons utiliser plusieurs Hooks *State* ou *Effect* au sein d'un même composant:
55
55
56
56
```js
57
57
functionForm() {
@@ -108,16 +108,16 @@ Tant que l'ordre d'appel aux Hooks est le même d’un affichage à l’autre, R
108
108
}
109
109
```
110
110
111
-
La condition `name !== ''` est vraie au premier affichage, donc nous exécutons ce Hook. Cependant, lors du prochain affichage l'utilisateur risque de vider le formulaire, ce qui invalidera la condition. À présent que nous sautons ce Hook lors de l’affichage, l'ordre d'appel aux Hooks devient différent:
111
+
La condition `name !== ''` est vraie au premier affichage, donc nous exécutons ce Hook. Cependant, lors du prochain affichage l'utilisateur risque de vider le formulaire, ce qui invalidera la condition. À présent que nous sautons ce Hook lors de l’affichage, l'ordre d'appel aux Hooks devient différent:
112
112
113
113
```js
114
114
useState('Mary') // 1. Lit la variable d'état name (l'argument est ignoré)
115
-
// useEffect(persistForm) // 🔴 Ce Hook n'a pas été appelé!
116
-
useState('Poppins') // 🔴 2 (mais était 3). Échoue lors de la lecture de la variable d'état surname
117
-
useEffect(updateTitle) // 🔴 3 (mais était 4). Échoue lors du remplacement de l'effet
115
+
// useEffect(persistForm) // 🔴 Ce Hook n'a pas été appelé!
116
+
useState('Poppins') // 🔴 2. (mais était 3). Échoue à lire la variable d'état surname
117
+
useEffect(updateTitle) // 🔴 3. (mais était 4). Échoue à remplacer de l'effet
118
118
```
119
119
120
-
React ne saurait pas quoi renvoyer lors du second appel au Hook `useState`. React s'attendait à ce que le second appel à un Hook dans ce composant corresponde à l'effet `persistForm`, comme lors de l’affichage précédent, mais ce n'est plus le cas. A partir de là, chaque appel à un Hook ultérieur à celui que nous avons sauté sera aussi décalé de un, provoquant des bugs.
120
+
React ne saurait pas quoi renvoyer lors du second appel au Hook `useState`. React s'attendait à ce que le deuxième appel à un Hook dans ce composant corresponde à l'effet `persistForm`, comme lors de l’affichage précédent, mais ce n'est plus le cas. A partir de là, chaque appel à un Hook ultérieur à celui que nous avons sauté sera aussi décalé de un, provoquant des bugs.
121
121
122
122
**C'est pourquoi les Hooks doivent être appelés au niveau racine de vos composants.** Si vous voulez exécuter un effet de manière conditionnelle, vous pouvez mettre cette condition *à l'intérieur* de votre Hook :
123
123
@@ -130,7 +130,7 @@ React ne saurait pas quoi renvoyer lors du second appel au Hook `useState`. Reac
130
130
});
131
131
```
132
132
133
-
**Remarquez que vous n’avez pas à vous inquiéter de ça si vous utilisez [la règle de lint fournie](https://www.npmjs.com/package/eslint-plugin-react-hooks).** Mais maintenant, vous savez *pourquoi* les Hooks fonctionnent de cette manière et quels problèmes la règle évite.
133
+
**Remarquez que vous n’avez pas à vous inquiéter de ça si vous utilisez [le plugin de *linter* fourni](https://www.npmjs.com/package/eslint-plugin-react-hooks).** Mais maintenant, vous savez *pourquoi* les Hooks fonctionnent de cette manière et quels problèmes ces règles évitent.
0 commit comments