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: src/content/reference/react/useId.md
+28-29Lines changed: 28 additions & 29 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -4,7 +4,7 @@ title: useId
4
4
5
5
<Intro>
6
6
7
-
`useId` est un Hook React permettant de générer des identifiants uniques qui peuvent être passés comme attributs d'accessibilité.
7
+
`useId` est un Hook React permettant de générer des identifiants uniques qui peuvent être passés comme attributs d’accessibilité.
8
8
9
9
```js
10
10
constid=useId()
@@ -30,35 +30,35 @@ function PasswordField() {
30
30
// ...
31
31
```
32
32
33
-
[Voir d'autres exemples ci-dessous.](#usage)
33
+
[Voir d’autres exemples ci-dessous.](#usage)
34
34
35
35
#### Paramètres {/*parameters*/}
36
36
37
37
`useId` ne prend aucun paramètre.
38
38
39
39
#### Valeur renvoyée {/*returns*/}
40
40
41
-
`useId` renvoie un identifiant textuel unique associé à cet appel `useId`particulier dans ce composant spécifique.
41
+
`useId` renvoie un identifiant textuel unique, associé à cet appel `useId`précis au sein de ce composant.
42
42
43
43
#### Limitations {/*caveats*/}
44
44
45
-
* `useId` est un Hook, vous pouvez donc uniquement l'appeler **à la racine de votre composant** ou de vos propres Hooks. Vous ne pouvez pas l'appeler à l'intérieur de boucles ou de conditions. Si nécessaire, extrayez un nouveau composant et déplacez l'état dans celui-ci.
45
+
* `useId` est un Hook, vous pouvez donc uniquement l’appeler **à la racine de votre composant** ou de vos propres Hooks. Vous ne pouvez pas l’appeler à l’intérieur de boucles ou de conditions. Si nécessaire, extrayez un nouveau composant et déplacez l'état dans celui-ci.
46
46
47
-
* `useId` ne doit pas être utilisé pour générer des clés dans une liste. [Les clés devraient être basées sur vos données.](/learn/rendering-lists#where-to-get-your-key)
47
+
* `useId` ne doit pas être utilisé pour générer des clés dans une liste. [Les clés devraient toujours être basées sur vos données.](/learn/rendering-lists#where-to-get-your-key)
48
48
49
49
---
50
50
51
51
## Utilisation {/*usage*/}
52
52
53
53
<Pitfall>
54
54
55
-
**N'appelez pas `useId` pour générer des clés dans une liste.** [Les clés devraient être basées sur vos données.](/learn/rendering-lists#where-to-get-your-key)
55
+
**N'appelez pas `useId` pour générer des clés dans une liste.** [Les clés devraient toujours être basées sur vos données.](/learn/rendering-lists#where-to-get-your-key)
56
56
57
57
</Pitfall>
58
58
59
-
### Générer des identifiants uniques pour les attributs d'accessibilité {/*generating-unique-ids-for-accessibility-attributes*/}
59
+
### Générer des identifiants uniques pour les attributs d’accessibilité {/*generating-unique-ids-for-accessibility-attributes*/}
60
60
61
-
Appelez `useId` à la racine de votre composant pour générer un identifiant unique:
61
+
Appelez `useId` à la racine de votre composant pour générer un identifiant unique:
62
62
63
63
```js [[1, 4, "passwordHintId"]]
64
64
import { useId } from'react';
@@ -68,7 +68,7 @@ function PasswordField() {
68
68
// ...
69
69
```
70
70
71
-
Vous pouvez ensuite transmettre <CodeStep step={1}>l'identifiant généré</CodeStep> à différents attributs:
71
+
Vous pouvez ensuite transmettre <CodeStep step={1}>l’identifiant généré</CodeStep> à différents attributs:
**Prenons un exemple pour mieux saisir l'utilité de cette méthode.**
80
+
**Prenons un exemple pour mieux saisir l’utilité de cette méthode.**
81
81
82
-
[Les attributs d'accessibilité HTML](https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA) tels que [`aria-describedby`](https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA/Attributes/aria-describedby) vous permettent de spécifier que deux balises sont liées l'une à l'autre. Par exemple, vous pouvez spécifier qu'un élément (tel qu'un champ de saisie) est décrit par un autre élément (tel qu'un paragraphe).
82
+
[Les attributs d’accessibilité HTML](https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA) tels que [`aria-describedby`](https://developer.mozilla.org/fr/docs/Web/Accessibility/ARIA/Attributes/aria-describedby) vous permettent de spécifier que deux balises sont liées l’une à l’autre. Par exemple, vous pouvez spécifier qu'un élément (tel qu'un champ de saisie) est décrit par un autre élément (tel qu'un paragraphe).
83
83
84
-
En HTML classique, vous l'écririez comme suit:
84
+
En HTML classique, vous l'écririez comme suit:
85
85
86
86
```html {5,8}
87
87
<label>
88
-
Mot de passe:
88
+
Mot de passe:
89
89
<input
90
90
type="password"
91
91
aria-describedby="password-hint"
@@ -96,7 +96,7 @@ En HTML classique, vous l'écririez comme suit :
96
96
</p>
97
97
```
98
98
99
-
Cependant, définir des ID en dur comme ça constitue une mauvaise pratique en React. Un composant pourrait être présent plusieurs fois sur la page--mais les ID doivent être uniques! Au lieu d'utiliser un identifiant fixe, générez un identifiant unique avec `useId`:
99
+
Cependant, définir des ID en dur comme ça constitue une mauvaise pratique en React. Un composant pourrait être présent plusieurs fois sur la page--mais les ID doivent être uniques! Au lieu d’utiliser un identifiant fixe, générez un identifiant unique avec `useId`:
100
100
101
101
```js {4,11,14}
102
102
import { useId } from'react';
@@ -106,7 +106,7 @@ function PasswordField() {
106
106
return (
107
107
<>
108
108
<label>
109
-
Mot de passe:
109
+
Mot de passe:
110
110
<input
111
111
type="password"
112
112
aria-describedby={passwordHintId}
@@ -120,7 +120,7 @@ function PasswordField() {
120
120
}
121
121
```
122
122
123
-
Désormais, même si `PasswordField`apparaît plusieurs fois à l'écran, les identifiants générés ne seront pas en conflit.
123
+
Désormais, même si `PasswordField`est utilisé plusieurs fois à l'écran, les identifiants générés ne rentreront pas en conflit.
124
124
125
125
<Sandpack>
126
126
@@ -132,7 +132,7 @@ function PasswordField() {
132
132
return (
133
133
<>
134
134
<label>
135
-
Mot de passe:
135
+
Mot de passe:
136
136
<input
137
137
type="password"
138
138
aria-describedby={passwordHintId}
@@ -163,7 +163,7 @@ input { margin: 5px; }
163
163
164
164
</Sandpack>
165
165
166
-
[Regardez cette vidéo](https://www.youtube.com/watch?v=0dNzNcuEuOo) pour comprendre en quoi ça améliore l'expérience des utilisateurs de technologies d'assistance.
166
+
[Regardez cette vidéo](https://www.youtube.com/watch?v=0dNzNcuEuOo) pour comprendre en quoi ça améliore l’expérience des utilisateurs de technologies d’assistance.
167
167
168
168
<Pitfall>
169
169
@@ -173,23 +173,23 @@ Avec [le rendu côté serveur](/reference/react-dom/server), **`useId` requiert
Vous vous demandez peut-être pourquoi il est préférable d’utiliser `useId` plutôt que d'incrémenter une variable globale, du genre `nextId++`.
178
+
Vous vous demandez peut-être pourquoi il est préférable d’utiliser `useId` plutôt que d’incrémenter une variable globale, du genre `nextId++`.
179
179
180
-
Le principal avantage de `useId` tient à ce que React garantit son bon fonctionnement dans [le rendu serveur](/reference/react-dom/server). Lors du rendu serveur, vos composants produisent du HTML. Plus tard, sur le client, le processus d'[hydratation](/reference/react-dom/client/hydrateRoot) attache vos gestionnaires d'événements au HTML généré. Pour que l'hydratation fonctionne, le résultat du code client doit correspondre au HTML du serveur.
180
+
Le principal avantage de `useId` tient à ce que React garantit son bon fonctionnement dans [le rendu serveur](/reference/react-dom/server). Lors du rendu serveur, vos composants produisent du HTML. Plus tard, sur le client, le processus d'[hydratation](/reference/react-dom/client/hydrateRoot) attache vos gestionnaires d'événements au HTML généré. Pour que l’hydratation fonctionne, le résultat du code client doit correspondre au HTML du serveur.
181
181
182
-
Il est très difficile de garantir ça avec un compteur incrémental, car l'ordre dans lequel les composants côté client sont hydratés peut ne pas correspondre à l'ordre dans lequel le code HTML du serveur est émis. En appelant `useId`, vous vous assurez que l'hydratation fonctionnera et que la sortie correspondra entre le serveur et le client.
182
+
Il est très difficile de garantir ça avec un compteur incrémental, car l’ordre dans lequel les composants côté client sont hydratés peut ne pas correspondre à l’ordre dans lequel le code HTML du serveur est émis. En appelant `useId`, vous vous assurez que l'hydratation fonctionnera et que la sortie correspondra entre le serveur et le client.
183
183
184
-
Dans React, `useId` est généré à partir du « chemin de parents » du composant appelant. C'est pourquoi, si l'arbre du client et celui du serveur sont identiques, ce « chemin » correspondra quel que soit l'ordre de rendu.
184
+
Dans React, `useId` est généré à partir du « chemin de parents » du composant appelant. C’est pourquoi, si l’arbre du client et celui du serveur sont identiques, ce « chemin » correspondra quel que soit l’ordre de rendu.
185
185
186
186
</DeepDive>
187
187
188
188
---
189
189
190
190
### Générer des identifiants pour plusieurs éléments liés {/*generating-ids-for-several-related-elements*/}
191
191
192
-
Si vous devez attribuer des identifiants à plusieurs éléments liés, vous pouvez appeler `useId` pour leur attribuer un préfixe commun:
192
+
Si vous devez attribuer des identifiants à plusieurs éléments liés, vous pouvez appeler `useId` pour leur attribuer un préfixe commun:
193
193
194
194
<Sandpack>
195
195
@@ -200,10 +200,10 @@ export default function Form() {
200
200
constid=useId();
201
201
return (
202
202
<form>
203
-
<label htmlFor={id +'-firstName'}>Prénom:</label>
203
+
<label htmlFor={id +'-firstName'}>Prénom:</label>
204
204
<input id={id +'-firstName'} type="text"/>
205
205
<hr />
206
-
<label htmlFor={id +'-lastName'}>Nom de famille:</label>
206
+
<label htmlFor={id +'-lastName'}>Nom de famille:</label>
207
207
<input id={id +'-lastName'} type="text"/>
208
208
</form>
209
209
);
@@ -242,11 +242,11 @@ import { useId } from 'react';
0 commit comments