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/use-client.md
+12-12Lines changed: 12 additions & 12 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -44,7 +44,7 @@ export default function RichTextEditor({ timestamp, text }) {
44
44
45
45
Lorsqu'un fichier marqué avec `'use client'` est importé par un composant côté serveur, [les *bundlers* compatibles](/learn/start-a-new-react-project#bleeding-edge-react-frameworks) traiteront l'import comme un « point de césure » entre le code côté serveur et le code côté client.
46
46
47
-
En tant que dépendances de `RichTextEditor`, `formatDate` et `Button` seront également évalués côté client, indépendamment de la présence d'une directive `'use client'` dans le module qui les déclare. Notez qu'un même module peut être évalué tant côté serveur lorsqu'il est importé par du code côté serveur, que côté client lorsqu'il est importé par du code côté client.
47
+
En tant que dépendances de `RichTextEditor`, `formatDate` et `Button` seront également évaluées côté client, indépendamment de la présence d'une directive `'use client'` dans le module qui les déclare. Notez qu'un même module peut être évalué tant côté serveur lorsqu'il est importé par du code côté serveur, que côté client lorsqu'il est importé par du code côté client.
48
48
49
49
#### Limitations {/*caveats*/}
50
50
@@ -53,7 +53,7 @@ En tant que dépendances de `RichTextEditor`, `formatDate` et `Button` seront é
53
53
* Lorsqu'un module de composant contient une directive `'use client'`, toute utilisation de ce composant produit de façon garantie un composant côté client. Ceci dit, un composant peut être évalué côté client même s'il n'utilise pas de directive `'use client'`.
54
54
* L'utilisation d'un composant constitue un composant côté client si elle a lieu dans un module doté d'une directive `'use client'` ou si elle compte dans ses dépendances (directes ou indirectes) un module doté d'une directive `'use client'`. Dans tous les autres cas, on considère que le composant est côté serveur.
55
55
* Le code marqué comme exécutable côté client ne se limite pas aux composants. Tout code figurant dans l'arbre des dépendances d'un module côté client est envoyé vers le client pour y être exécuté.
56
-
* Lorsqu'un module côté serveur importe les valeurs d'un module doté de la directive `'use client'`, les valeurs en question doivent être soit un composant React, soit une des [valeurs de prop sérialisables](#passing-props-from-server-to-client-components) prises en charge afin de pouvoir être passées au composant côté client. Tout autre cas de figure lève une exception.
56
+
* Lorsqu'un module côté serveur importe les valeurs d'un module doté de la directive `'use client'`, les valeurs en question doivent être soit un composant React, soit une des [valeurs de prop sérialisables](#passing-props-from-server-to-client-components) prises en charge afin de pouvoir être passées au composant côté client par du code côté serveur. Tout autre cas de figure lève une exception.
57
57
58
58
### Comment `'use client'` marque du code comme étant côté client {/*how-use-client-marks-client-code*/}
59
59
@@ -154,7 +154,7 @@ Dans l'arbre de dépendances de modules pour cette appli d'exemple, la directive
154
154
</Diagram>
155
155
156
156
157
-
Lors du rendu, le framework fera un rendu côté serveur du composant racine et continuera à traverser [l'arbre de rendu](/learn/understanding-your-ui-as-a-tree#the-render-tree), en sautant l'évaluation de tout code importée par du code côté client.
157
+
Lors du rendu, le framework fera un rendu côté serveur du composant racine et continuera à traverser [l'arbre de rendu](/learn/understanding-your-ui-as-a-tree#the-render-tree), en sautant l'évaluation de tout code importé par du code côté client.
158
158
159
159
La partie rendue côté serveur de l'arbre de rendu est alors envoyée côté client. Le client, ainsi que le code côté client qu'il aura téléchargé, termine enfin le rendu du reste de l'arborescence.
160
160
@@ -179,7 +179,7 @@ En parcourant l'appli d'exemple, `App`, `FancyText` et `Copyright` sont tous ren
179
179
180
180
Commençons par clarifier le terme « composant », qui n'est pas très précis. Voici deux façons de comprendre « composant » :
181
181
182
-
1. Un « composant » peut désigner une **définition de composant**. La plupart du temps, il s'agira d'une fonction.
182
+
1. Un « composant » peut désigner une **définition de composant**. La plupart du temps, il s'agira en pratique d'une fonction.
183
183
184
184
```js
185
185
// Voici une définition de composant
@@ -198,11 +198,11 @@ function App() {
198
198
}
199
199
```
200
200
201
-
Cette distinction est généralement superflue lorsqu'on explique des concepts, mais elle a ici son importance.
201
+
Cette distinction est généralement superflue lorsqu'on explique des concepts, mais revêt ici une importance particulière.
202
202
203
203
Lorsque nous parlons de composants côté serveur ou côté client, nous faisons spécifiquement référence à l'utilisation des composants.
204
204
205
-
* Si le composant est défini dans un module porteur de la directive `'use client'`, ou s'ile st importé et appelé dans un composant côté client, alors l'utilisation de ce composant constitue un composant côté client.
205
+
* Si le composant est défini dans un module porteur de la directive `'use client'`, ou s'il est importé et appelé dans un composant côté client, alors l'utilisation de ce composant constitue un composant côté client.
206
206
* Dans les autres cas, l'utilisation de ce composant constitue un composant côté serveur.
207
207
208
208
<Diagramname="use_client_render_tree"height={150}width={450}alt="Un graphe d’arborescence où chaque nœud représente un composant et ses enfants comme composants enfants. Le nœud sommet est étiquetté 'App' et a deux composants enfants : 'InspirationGenerator' et 'FancyText'. 'InspirationGenerator' a deux composants enfants, 'FancyText' et 'Copyright'. Aussi bien 'InspirationGenerator' que son composant enfant 'FancyText' sont marqués comme utilisant un rendu côté client.">
@@ -225,15 +225,15 @@ L'utilisation de `FancyText` comme enfant de `App` marque cette utilisation comm
225
225
226
226
Dans la mesure où `Copyright` figure comme composant enfant dans le rendu du composant côté client `InspirationGenerator`, vous êtes peut-être surpris·e qu'il soit considéré comme un composant côté serveur.
227
227
228
-
Gardez à l'esprit que `'use client'` définit un « point de césure » entre les code côté serveur et côté client dans *l'arbre de dépendances de modules*, pas dans l'arbre de rendu.
228
+
Gardez à l'esprit que `'use client'` définit un « point de césure » entre les codes côté serveur et côté client dans *l'arbre de dépendances de modules*, pas dans l'arbre de rendu.
229
229
230
230
<Diagramname="use_client_module_dependency"height={200}width={500}alt="Un graphe d’arborescence avec le nœud sommet représentant le module 'App.js'. 'App.js' a trois enfants : 'Copyright.js', 'FancyText.js' et 'InspirationGenerator.js'. 'InspirationGenerator.js' a deux enfants : 'FancyText.js' et 'inspirations.js'. Les nœuds à partir de 'InspirationGenerator.js' ont un arrière-plan jaune pour indiquer qu’il s’agit du sous-graphe exécuté côté client en raison de la directive 'use client' dans 'InspirationGenerator.js'.">
231
231
232
232
`'use client'` définit un « point de césure » entre les codes côté serveur et côté client de l'arbre de dépendances de modules.
233
233
234
234
</Diagram>
235
235
236
-
Dans l'arbre de dépendances de modules, nous voyons que `App.js` importe et appelle `Copyright` depuis le module `Copyright.js`. Puisque `Copyright.js` ne comporte pas de directive `'use client'`, cette utilisation du composant est rendue côté serveur. `App` est lui aussi rendu coté serveur puisqu'il s'agit du composant racine.
236
+
Dans l'arbre de dépendances de modules, nous voyons que `App.js` importe et appelle `Copyright` depuis le module `Copyright.js`. Puisque `Copyright.js` ne comporte pas de directive `'use client'`, cette utilisation du composant est rendue côté serveur. `App` est lui aussi rendu côté serveur puisqu'il s'agit du composant racine.
237
237
238
238
Les composants côté client peuvent faire le rendu de composants côté serveur parce que vous pouvez passer du JSX comme props. Dans notre cas, `InspirationGenerator` reçoit `Copyright` comme [enfant](/learn/passing-props-to-a-component#passing-jsx-as-children). Cependant, le module `InspirationGenerator.js` n'importe jamais directement le module `Copyright.js`, c'est le module `App.js` qui s'en occupe. En fait, le composant `Copyright` est entièrement exécuté avant même qu'`InspirationGenerator` ne commence son rendu.
239
239
@@ -250,7 +250,7 @@ Par souci de simplicité, nous parlons ici des composants côté serveur, mais l
250
250
#### Avantages des composants côté serveur {/*advantages*/}
251
251
252
252
* Les composants côté serveur aident à réduire la quantité de code envoyée et exécutée côté client. Seuls les modules client sont intégrés aux *bundles* et évalués côté client.
253
-
* Les composants côté serveur tirent parti de leur exécution côté serveur : ils peuvent accéder au système de fichiers local et bénéficient d'une faible latence pour leurs chargements de données et autres requêtes réseau.
253
+
* Les composants côté serveur tirent parti de leur exécution côté serveur : ils peuvent accéder à son système de fichiers local et bénéficient par ailleurs d'une faible latence pour leurs chargements de données et autres requêtes réseau.
254
254
255
255
#### Limitations des composants côté serveurs {/*limitations*/}
256
256
@@ -263,7 +263,7 @@ Par souci de simplicité, nous parlons ici des composants côté serveur, mais l
263
263
264
264
Comme dans n'importe quelle appli React, les composants parents passent des données à leurs composants enfants. Puisqu'ils sont ici rendus dans des environnements distincts, le passage de données d'un composant côté serveur à un composant côté client nécessite une attention particulière.
265
265
266
-
Les valeurs de props passées d'un composant côté serveur à un composant côté client doivent être sérialisables.
266
+
Les valeurs de props passées à un composant côté client doivent être sérialisables.
267
267
268
268
Voici les types de props sérialisables :
269
269
@@ -337,7 +337,7 @@ export default async function CounterContainer() {
337
337
338
338
Ici le composant parent de `Counter`, à savoir `CounterContainer`, ne requiert par exemple pas de directive `'use client'` puisqu'il n'est pas interactif et n'utilise aucun état. Qui plus est, `CounterContainer` doit être un composant côté serveur puisqu'il lit le système de fichiers local du serveur, ce qui n'est possible que dans un composant côté serveur.
339
339
340
-
On trouve aussi des composants qui n'utilisent aucun aspect exclusif aux côtés serveur ou client, et sont donc agnostiques quant à leur environnement de rendu. Dans notre exemple précédent, c'est le cas du composant `FancyText`.
340
+
On trouve aussi des composants qui n'utilisent aucun aspect exclusif aux côtés serveur ou client, et sont donc agnostiques quant à leur environnement de rendu. Dans notre exemple précédent, c'est notamment le cas du composant `FancyText`.
341
341
342
342
```js
343
343
exportdefaultfunctionFancyText({title, text}) {
@@ -355,7 +355,7 @@ Mais si le HTML produit par `FancyText` s'avérait nettement plus lourd que son
355
355
356
356
Votre appli React utilise peut-être des API réservées au côté client, telles que des API web de stockage, de manipulation audio/vidéo ou d'interaction avec le matériel, [pour ne citer qu'elles](https://developer.mozilla.org/fr/docs/Web/API).
357
357
358
-
Dans le code qui suit, le composant utilise [l'API DOM](https://developer.mozilla.org/fr/docs/Glossary/DOM)popur manipuler un élément [`canvas`](https://developer.mozilla.org/fr/docs/Web/HTML/Element/canvas). Dans la mesure où ces API ne sont disponibles que dans le navigateur, le composant doit être marqué comme étant côté client.
358
+
Dans le code qui suit, le composant utilise [l'API DOM](https://developer.mozilla.org/fr/docs/Glossary/DOM)pour manipuler un élément [`canvas`](https://developer.mozilla.org/fr/docs/Web/HTML/Element/canvas). Dans la mesure où ces API ne sont disponibles que dans le navigateur, le composant doit être marqué comme étant côté client.
0 commit comments