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-reference.md
+21-21
Original file line number
Diff line number
Diff line change
@@ -8,7 +8,7 @@ next: hooks-faq.html
8
8
9
9
Les *Hooks* sont une nouveauté de React 16.8. Ils permettent de bénéficier d’un état local et d'autres fonctionnalités de React sans avoir à écrire de classes.
10
10
11
-
Cette page décrit les API des Hooks prédéfinis de React.
11
+
Cette page décrit l’API des Hooks prédéfinis de React.
12
12
13
13
Si les Hooks sont nouveaux pour vous, vous voudrez peut-être consulter [l’aperçu](/docs/hooks-overview.html) en premier. Vous trouverez peut-être aussi des informations utiles dans [la foire aux questions](/docs/hooks-faq.html).
Renvoie une valeur d'état local et une fonction pour la mettre à jour.
37
37
38
-
Pendant le rendu initial, l'état local (`state`) renvoie la même valeur que celle passée en premier argument (`initialState`).
38
+
Pendant le rendu initial, l'état local (`state`) a la même valeur que celle passée en premier argument (`initialState`).
39
39
40
40
La fonction `setState` permet de mettre à jour l'état local. Elle accepte une nouvelle valeur d'état local et planifie un nouveau rendu du composant.
41
41
@@ -47,7 +47,7 @@ Au cours des rendus suivants, la première valeur renvoyée par `useState` sera
47
47
48
48
#### Mises à jour fonctionnelles {#functional-updates}
49
49
50
-
Si le nouvel état local est déduit de l'état local précédent, vous pouvez passer une fonction à `setState`. Cette fonction recevra la valeur précédente de l'état local et renverra une nouvelle valeur de l'état local. Voici un exemple d'un composant compteur qui utilise les deux formes de `setState`:
50
+
Si le nouvel état local est déduit de l'état local précédent, vous pouvez passer une fonction à `setState`. Cette fonction recevra la valeur précédente de l'état local et renverra une nouvelle valeur de l'état local. Voici un exemple d'un composant compteur qui utilise les deux formes de `setState`:
51
51
52
52
```js
53
53
functionCounter({initialCount}) {
@@ -63,7 +63,7 @@ function Counter({initialCount}) {
63
63
}
64
64
```
65
65
66
-
Les boutons « + » et « - » utilisent la forme fonctionnelle, puisque la nouvelle valeur est calculée à partir de la valeur précédente. Le bouton «Réinitialiser» utilise quant à lui la forme normale puisqu'il remet toujours le total à une valeur fixe.
66
+
Les boutons « + » et « - » utilisent la forme fonctionnelle, puisque la nouvelle valeur est calculée à partir de la valeur précédente. Le bouton «Réinitialiser» utilise quant à lui la forme normale puisqu'il remet toujours le total à une valeur fixe.
67
67
68
68
> Remarque
69
69
>
@@ -80,7 +80,7 @@ Les boutons « + » et « - » utilisent la forme fonctionnelle, puisque la
80
80
81
81
#### État local initial paresseux {#lazy-initial-state}
82
82
83
-
Le rendu initial utilise l'argument `initialState` comme état local. Au cours des rendus suivants, il est ignoré. Si l'état local initial est le résultat d'un calcul coûteux, vous pouvez plutôt fournir une fonction qui sera executée seulement au cours du rendu initial:
83
+
Le rendu initial utilise l'argument `initialState` comme état local. Au cours des rendus suivants, il est ignoré. Si l'état local initial est le résultat d'un calcul coûteux, vous pouvez plutôt fournir une fonction qui sera executée seulement au cours du rendu initial:
84
84
85
85
```js
86
86
const [state, setState] =useState(() => {
@@ -99,7 +99,7 @@ Si vous mettez à jour un Hook d'état avec la même valeur que son état actuel
99
99
useEffect(didUpdate);
100
100
```
101
101
102
-
Accepte une fonction qui contient du code impératif, pouvant éventuellement produire des effets.
102
+
Accepte une fonction qui contient du code impératif, pouvant éventuellement produire des effets.
103
103
104
104
L'utilisation de mutations, abonnements, horloges, messages de journalisation, et autres effets de bord n'est pas autorisée au sein du corps principal d'une fonction composant (qu'on appelle la _phase de rendu_ de React). Autrement ça pourrait entraîner des bugs déconcertants et des incohérences dans l'interface utilisateur (UI).
105
105
@@ -120,7 +120,7 @@ useEffect(() => {
120
120
};
121
121
});
122
122
```
123
-
La fonction de nettoyage est exécutée avant que le composant ne soit retiré de l'UI pour éviter les fuites de mémoire. Par ailleurs, si un composant s’affiche plusieurs fois (comme c'est typiquement le cas), **l'effet de bord précédent est nettoyé avant l'exécution du prochain effet de bord**. Dans notre exemple, ça veut dire qu'un nouvel abonnement est créé à chaque mise à jour. Pour éviter d'exécuter un effet de bord à chaque mise à jour, voyez le paragraphe suivant.
123
+
La fonction de nettoyage est exécutée avant que le composant ne soit retiré de l'UI pour éviter les fuites de mémoire. Par ailleurs, si un composant s’affiche plusieurs fois (comme c'est typiquement le cas), **l'effet de bord précédent est nettoyé avant l'exécution du prochain effet de bord**. Dans notre exemple, ça veut dire qu'un nouvel abonnement est créé à chaque mise à jour. Pour éviter d'exécuter un effet de bord à chaque mise à jour, voyez la section sur l’exécution conditionnelle un peu plus loin.
124
124
125
125
#### Moment d'exécution des effets de bord {#timing-of-effects}
126
126
@@ -136,7 +136,7 @@ Le comportement par défaut des effets de bord consiste à exécuter l'effet apr
136
136
137
137
Cependant, ça pourrait être exagéré dans certains cas, comme dans l'exemple avec l'abonnement dans la section précédente. On n’a pas besoin d’un nouvel abonnement à chaque mise à jour, mais seulement si la prop `source` a changé.
138
138
139
-
Pour mettre ça en œuvre, fournissez un deuxième argument à `useEffect` qui consiste en un tableau de valeurs dont l'effet dépend. Notre exemple mis à jour ressemble maintenant à ça:
139
+
Pour mettre ça en œuvre, fournissez un deuxième argument à `useEffect` qui consiste en un tableau de valeurs dont l'effet dépend. Notre exemple mis à jour ressemble maintenant à ça:
140
140
141
141
```js
142
142
useEffect(
@@ -152,11 +152,11 @@ useEffect(
152
152
153
153
L'abonnement sera maintenant recréé uniquement quand `props.source` change.
154
154
155
-
Fournir un tableau vide `[]` d'entrées indique à React que votre effet ne dépend d'aucune valeur du composant, du coup l'effet ne s'exécuterait que lors du montage et ne se nettoierait qu’au démontage; il ne s'exécuterait pas lors des mises à jour.
155
+
Fournir un tableau vide `[]` d'entrées indique à React que votre effet ne dépend d'aucune valeur du composant, du coup l'effet ne s'exécuterait que lors du montage et ne se nettoierait qu’au démontage; il ne s'exécuterait pas lors des mises à jour.
156
156
157
157
> Remarque
158
158
>
159
-
> Le tableau d'entrées n'est pas fourni comme argument à la fonction d'effet. Conceptuellement cependant, c'est en quelque sorte ce qui se passe: chaque valeur référencée dans la fonction d'effet devrait aussi apparaître dans le tableau d'entrées. À l'avenir, un compilateur suffisamment avancé pourrait créer ce tableau automatiquement.
159
+
> Le tableau d'entrées n'est pas fourni comme argument à la fonction d'effet. Conceptuellement cependant, c'est en quelque sorte ce qui se passe: chaque valeur référencée dans la fonction d'effet devrait aussi apparaître dans le tableau d'entrées. À l'avenir, un compilateur suffisamment avancé pourrait créer ce tableau automatiquement.
160
160
161
161
### `useContext` {#usecontext}
162
162
@@ -170,7 +170,7 @@ Quand le fournisseur met la valeur à jour, ce Hook va déclencher un nouveau re
170
170
171
171
## Hooks supplémentaires {#additional-hooks}
172
172
173
-
Les Hooks suivant sont soit des variantes des Hooks basiques des paragraphes précédents, soit seulement nécessaires pour des cas à la marge spécifiques. Ne vous sentez pas obligé·e de les apprendre dès le départ.
173
+
Les Hooks qui suivent sont soit des variantes des Hooks basiques des sections précédentes, soit seulement nécessaires pour des cas à la marge spécifiques. Ne vous sentez pas obligé·e de les apprendre dès le départ.
174
174
175
175
### `useReducer` {#usereducer}
176
176
@@ -182,7 +182,7 @@ Alternative à [`useState`](#usestate). Accepte un réducteur de type `(state, a
182
182
183
183
`useReducer` est souvent préférable à `useState` quand vous avez une logique d'état local complexe qui comprend plusieurs sous-valeurs, ou quand l'état suivant dépend de l'état précédent. `useReducer` vous permet aussi d'optimiser les performances pour des composants qui déclenchent des mises à jours profondes puisque [vous pouvez fournir `dispatch` à la place de fonctions de rappel](/docs/hooks-faq.html#how-to-avoid-passing-callbacks-down).
184
184
185
-
Voici l'exemple du composant compteur du paragraphe [`useState`](#usestate) ré-écrit avec un réducteur:
185
+
Voici l'exemple du composant compteur du paragraphe [`useState`](#usestate) ré-écrit avec un réducteur:
186
186
187
187
```js
188
188
constinitialState= {count:0};
@@ -212,7 +212,7 @@ function Counter({initialState}) {
212
212
213
213
#### Préciser l'état local initial {#specifying-the-initial-state}
214
214
215
-
Il existe deux manières différentes d'initialiser l'état de `useReducer`. Vous pouvez choisir l'une ou l'autre suivant le cas. La manière la plus simple consiste à fournir l'état initial comme deuxième argument:
215
+
Il existe deux manières différentes d'initialiser l'état de `useReducer`. Vous pouvez choisir l'une ou l'autre suivant le cas. La manière la plus simple consiste à fournir l'état initial comme deuxième argument:
216
216
217
217
```js{3}
218
218
const [state, dispatch] = useReducer(
@@ -229,7 +229,7 @@ Il existe deux manières différentes d'initialiser l'état de `useReducer`. Vou
229
229
230
230
Vous pouvez aussi créer l'état local initial paresseusement. Pour ce faire, vous pouvez fournir une fonction `init` comme troisième argument. L'état initial sera alors égal à `init(initialArg)`.
231
231
232
-
Ça vous permet d'extraire la logique pour calculer l'état local initial hors du réducteur. C'est aussi pratique pour réinitialiser l'état local en réponse à une action ultérieure:
232
+
Ça vous permet d'extraire la logique pour calculer l'état local initial hors du réducteur. C'est aussi pratique pour réinitialiser l'état local en réponse à une action ultérieure:
233
233
234
234
```js{1-3,11-12,19,24}
235
235
function init(initialCount) {
@@ -289,7 +289,7 @@ Fournissez une fonction de rappel et un tableau d'entrées. `useCallback` renver
289
289
290
290
> Remarque
291
291
>
292
-
> Le tableau d'entrées n'est pas fourni comme argument à la fonction de rappel. Conceptuellement cependant, c'est en quelque sorte ce qui se passe: chaque valeur référencée dans la fonction de rappel devrait aussi apparaître dans le tableau d'entrées. À l’avenir, un compilateur suffisamment avancé pourrait créer ce tableau automatiquement.
292
+
> Le tableau d'entrées n'est pas fourni comme argument à la fonction de rappel. Conceptuellement cependant, c'est en quelque sorte ce qui se passe: chaque valeur référencée dans la fonction de rappel devrait aussi apparaître dans le tableau d'entrées. À l’avenir, un compilateur suffisamment avancé pourrait créer ce tableau automatiquement.
Renvoie une valeur [mémoïsée](https://fr.wikipedia.org/wiki/M%C3%A9mo%C3%AFsation)
301
301
302
-
Fournissez une fonction de «création» et un tableau d'entrées. `useMemo` recalculera la valeur mémoïsée seulement si une des entrées a changé. Cette optimisation permet d'éviter des calculs coûteux à chaque rendu.
302
+
Fournissez une fonction de «création» et un tableau d'entrées. `useMemo` recalculera la valeur mémoïsée seulement si une des entrées a changé. Cette optimisation permet d'éviter des calculs coûteux à chaque rendu.
303
303
304
304
Rappelez-vous que la fonction fournie à `useMemo` s'exécute pendant le rendu. N’y faites rien que vous ne feriez pas normalement pendant un rendu. Par exemple, les effets de bord doivent passer par `useEffect`, et non `useMemo`.
305
305
306
306
Si vous ne fournissez aucun tableau, une nouvelle valeur sera calculée quand une nouvelle fonction sera fournie comme premier argument. (Avec une fonction définie à la volée, ce sera donc à chaque rendu.)
307
307
308
-
**Vous pouvez vous appuyer sur `useMemo` comme un moyen d'optimiser les performances, mais pas comme une garantie sémantique.** À l'avenir, React pourrait choisir «d'oublier» certaines valeurs précédemment mémoïsées et de les recalculer au rendu suivant, par exemple pour libérer la mémoire exploitée par des composants présents hors de l'écran. Écrivez votre code de façon à ce qu'il fonctionne sans `useMemo` et ajoutez-le ensuite pour optimiser les performances.
308
+
**Vous pouvez vous appuyer sur `useMemo` comme un moyen d'optimiser les performances, mais pas comme une garantie sémantique.** À l'avenir, React pourrait choisir «d'oublier» certaines valeurs précédemment mémoïsées et de les recalculer au rendu suivant, par exemple pour libérer la mémoire exploitée par des composants présents hors de l'écran. Écrivez votre code de façon à ce qu'il fonctionne sans `useMemo` et ajoutez-le ensuite pour optimiser les performances.
309
309
310
310
> Remarque
311
311
>
312
-
> Le tableau d'entrées n'est pas fourni comme argument à la fonction. Conceptuellement cependant, c'est en quelque sorte ce qui se passe: chaque valeur référencée dans la fonction devrait aussi apparaître dans le tableau d'entrées. À l'avenir, un compilateur suffisamment avancé pourrait créer ce tableau automatiquement.
312
+
> Le tableau d'entrées n'est pas fourni comme argument à la fonction. Conceptuellement cependant, c'est en quelque sorte ce qui se passe: chaque valeur référencée dans la fonction devrait aussi apparaître dans le tableau d'entrées. À l'avenir, un compilateur suffisamment avancé pourrait créer ce tableau automatiquement.
313
313
314
314
### `useRef` {#useref}
315
315
316
316
```js
317
317
constrefContainer=useRef(initialValue);
318
318
```
319
319
320
-
`useRef` renvoie un objet ref modifiable dont la propriété `.current` est initialisée avec l'argument fourni (`initialValue`). L'objet renvoyé persistera pendant toute la durée de vie composant.
320
+
`useRef` renvoie un objet ref modifiable dont la propriété `current` est initialisée avec l'argument fourni (`initialValue`). L'objet renvoyé persistera pendant toute la durée de vie composant.
321
321
322
-
Un cas d’usage courant consiste à accéder à un enfant de manière impérative:
322
+
Un cas d’usage courant consiste à accéder à un enfant de manière impérative:
323
323
324
324
```js
325
325
functionTextInputWithFocusButton() {
@@ -345,7 +345,7 @@ Remarquez que `useRef()` est utile au-delà du seul attribut `ref`. C'est [prati
345
345
useImperativeHandle(ref, createHandle, [inputs])
346
346
```
347
347
348
-
`useImperativeHandle` personnalise l'instance qui est exposée au composant parent lors de l'utilisation de `ref`. Comme toujours, il vaut mieux s'abstenir d'utiliser du code impératif manipulant des refs dans la plupart des cas. `useImperativeHandle` est conçu pour être utilisé en conjonction avec `forwardRef`:
348
+
`useImperativeHandle` personnalise l'instance qui est exposée au composant parent lors de l'utilisation de `ref`. Comme toujours, il vaut mieux s'abstenir d'utiliser du code impératif manipulant des refs dans la plupart des cas. `useImperativeHandle` est conçu pour être utilisé en conjonction avec `forwardRef`:
0 commit comments