Skip to content

Commit 5347211

Browse files
committed
copy(l10n): server components
1 parent 0466ce4 commit 5347211

File tree

2 files changed

+75
-72
lines changed

2 files changed

+75
-72
lines changed

src/content/reference/rsc/directives.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,13 @@ canary: true
55

66
<Canary>
77

8-
Ces directives ne sont utiles que si vous [utilisez React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks) ou créez une bibliothèque compatible avec eux.
8+
Ces directives ne sont utiles que si vous [utilisez les Composants Serveur](/learn/start-a-new-react-project#bleeding-edge-react-frameworks) ou créez une bibliothèque compatible avec eux.
99

1010
</Canary>
1111

1212
<Intro>
1313

14-
Les directives fournissent des instructions à destination des [*bundlers* compatibles avec React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
14+
Les directives fournissent des instructions à destination des [*bundlers* compatibles avec les Composants Serveur](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
1515

1616
</Intro>
1717

Lines changed: 73 additions & 70 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,52 @@
11
---
2-
title: React Server Components
2+
title: Composants Serveur
33
canary: true
44
---
55

6-
{/* FIXME:L10N */}
7-
86
<Intro>
97

10-
Server Components are a new type of Component that renders ahead of time, before bundling, in an environment separate from your client app or SSR server.
8+
Les Composants Serveur *(React Server Components, ou RSC — NdT)* sont un nouveau type de Composant qui font un rendu anticipé, avant le *bundling*, dans un environnement distinct de votre appli client et d'un serveur SSR.
119

1210
</Intro>
1311

14-
This separate environment is the "server" in React Server Components. Server Components can run once at build time on your CI server, or they can be run for each request using a web server.
12+
Cet environnement séparé est le « serveur » des Composants Serveur. Les Composants Serveur peuvent n'être exécutés qu'une seule fois au moment du build sur votre serveur de CI, ou peuvent l'être à chaque requête au sein d'un serveur web.
1513

1614
<InlineToc />
1715

1816
<Note>
1917

20-
#### How do I build support for Server Components? {/*how-do-i-build-support-for-server-components*/}
18+
#### Comment prendre en charge les Composants Serveur ? {/*how-do-i-build-support-for-server-components*/}
2119

22-
While React Server Components in React 19 are stable and will not break between major versions, the underlying APIs used to implement a React Server Components bundler or framework do not follow semver and may break between minors in React 19.x.
20+
Même si les Composants Serveur dans React 19 sont stables et ne casseront pas la compatibilité entre les versions majeures, les API sous-jacentes utilisées pour implémenter les Composants Serveur au sein d'un *bundler* ou framework ne suivent pas, elles, le versionnage sémantique et sont susceptibles de casser la compatibilité entre les versions mineures de React 19.x.
2321

24-
To support React Server Components as a bundler or framework, we recommend pinning to a specific React version, or using the Canary release. We will continue working with bundlers and frameworks to stabilize the APIs used to implement React Server Components in the future.
22+
Pour prendre en charge les Composants Serveur dans un *bundler* ou framework, nous vous conseillons de figer React sur une version spécifique, ou d'utiliser une version Canari. Nous allons continuer à collaborer avec les *bundlers* et frameworks pour stabiliser les API utilisées pour implémenter les Composants Serveur à l'avenir.
2523

2624
</Note>
2725

28-
### Server Components without a Server {/*server-components-without-a-server*/}
29-
Server components can run at build time to read from the filesystem or fetch static content, so a web server is not required. For example, you may want to read static data from a content management system.
26+
### Composants Serveur… sans serveur {/*server-components-without-a-server*/}
27+
28+
Les Composants Serveur peuvent être exécutés au moment du build pour lire des données du système de fichiers ou charger du contenu statique, de sorte qu'un serveur web n'est alors pas nécessaire. Vous pourriez par exemple vouloir lire des données statiques issues d'un système de gestion de contenu (CMS).
29+
30+
Sans les Composants Serveur, on aurait classiquement recours à un chargement des données statiques depuis le client, au sein d'un Effet :
3031

31-
Without Server Components, it's common to fetch static data on the client with an Effect:
3232
```js
3333
// bundle.js
3434
import marked from 'marked'; // 35.9K (11.2K gzipped)
3535
import sanitizeHtml from 'sanitize-html'; // 206K (63.3K gzipped)
3636

3737
function Page({page}) {
3838
const [content, setContent] = useState('');
39-
// NOTE: loads *after* first page render.
39+
// NOTE : charge *après* le rendu initial de la page.
4040
useEffect(() => {
4141
fetch(`/api/content/${page}`).then((data) => {
4242
setContent(data.content);
4343
});
4444
}, [page]);
45-
45+
4646
return <div>{sanitizeHtml(marked(content))}</div>;
4747
}
4848
```
49+
4950
```js
5051
// api.js
5152
app.get(`/api/content/:page`, async (req, res) => {
@@ -55,62 +56,65 @@ app.get(`/api/content/:page`, async (req, res) => {
5556
});
5657
```
5758

58-
This pattern means users need to download and parse an additional 75K (gzipped) of libraries, and wait for a second request to fetch the data after the page loads, just to render static content that will not change for the lifetime of the page.
59+
Cette approche implique que les utilisateurs aient besoin de télécharger et parser 75 Ko (compressés) complémentaires de bibliothèques, pour ensuite attendre qu'une seconde requête de chargement aboutisse après le chargement initial de la page, tout ça pour simplement afficher du contenu statique qui ne changera plus une fois la page affichée.
5960

60-
With Server Components, you can render these components once at build time:
61+
Avec les Composants Serveur, vous pouvez faire le rendu de ces composants une seule fois, lors du build :
6162

6263
```js
63-
import marked from 'marked'; // Not included in bundle
64-
import sanitizeHtml from 'sanitize-html'; // Not included in bundle
64+
import marked from 'marked'; // Non inclus dans le bundle
65+
import sanitizeHtml from 'sanitize-html'; // Non inclus dans le bundle
6566

6667
async function Page({page}) {
67-
// NOTE: loads *during* render, when the app is built.
68+
// NOTE : charge *pendant* le rendu, durant le build de l'appli.
6869
const content = await file.readFile(`${page}.md`);
69-
70+
7071
return <div>{sanitizeHtml(marked(content))}</div>;
7172
}
7273
```
7374

74-
The rendered output can then be server-side rendered (SSR) to HTML and uploaded to a CDN. When the app loads, the client will not see the original `Page` component, or the expensive libraries for rendering the markdown. The client will only see the rendered output:
75+
Le résultat peut alors être rendu côté serveur (SSR) en HTML et téléversé sur un CDN. Lorsque l'appli charge, le client ne verra pas le composant `Page` d'origine, ni les lourdes bibliothèques nécessaires au rendu du Markdown. Le client ne verra que le résultat final :
7576

7677
```js
77-
<div><!-- html for markdown --></div>
78+
<div><!-- HTML issu du Markdown --></div>
7879
```
7980

80-
This means the content is visible during first page load, and the bundle does not include the expensive libraries needed to render the static content.
81+
Ça signifie que le contenu est visible dès le chargement initial de la page, et que le bundle n'inclut pas les lourdes bibliothèques nécessaires à la production du contenu statique.
8182

8283
<Note>
8384

84-
You may notice that the Server Component above is an async function:
85+
Vous avez peut-être remarqué que le Composant Serveur ci-dessus est une fonction asynchrone :
8586

8687
```js
8788
async function Page({page}) {
8889
//...
8990
}
9091
```
9192

92-
Async Components are a new feature of Server Components that allow you to `await` in render.
93+
Les composants asynchrones sont une nouvelle possibilité offerte par les Composants Serveur, qui vous permet de recourir à `await` lors du rendu.
9394

94-
See [Async components with Server Components](#async-components-with-server-components) below.
95+
Vous en saurez plus dans [Composants asynchrones et Composants Serveur](#async-components-with-server-components) plus loin dans cette page.
9596

9697
</Note>
9798

98-
### Server Components with a Server {/*server-components-with-a-server*/}
99-
Server Components can also run on a web server during a request for a page, letting you access your data layer without having to build an API. They are rendered before your application is bundled, and can pass data and JSX as props to Client Components.
99+
### Composants Serveur… avec un serveur {/*server-components-with-a-server*/}
100+
101+
{/* FIXME:L10N */}
102+
103+
Les Composants Serveur peuvent aussi être exécutés dans un serveur web lors du traitement d'une requête pour une page, ce qui vous permet d'accéder à votre couche de données sans avoir besoin de construire une API. Le rendu est fait avant le *bundling* de l'appli, et peut passer des données et du JSX à des Composants Client.
100104

101-
Without Server Components, it's common to fetch dynamic data on the client in an Effect:
105+
Sans Composants Serveur, on a généralement recours à un Effet pour charger des données côté client :
102106

103107
```js
104108
// bundle.js
105109
function Note({id}) {
106110
const [note, setNote] = useState('');
107-
// NOTE: loads *after* first render.
111+
// NOTE : charge *après* le rendu initial de la page.
108112
useEffect(() => {
109113
fetch(`/api/notes/${id}`).then(data => {
110114
setNote(data.note);
111115
});
112116
}, [id]);
113-
117+
114118
return (
115119
<div>
116120
<Author id={note.authorId} />
@@ -121,15 +125,15 @@ function Note({id}) {
121125

122126
function Author({id}) {
123127
const [author, setAuthor] = useState('');
124-
// NOTE: loads *after* Note renders.
125-
// Causing an expensive client-server waterfall.
128+
// NOTE : charge *après* le rendu de `Note`.
129+
// Ça entraîne une cascade client-serveur coûteuse.
126130
useEffect(() => {
127131
fetch(`/api/authors/${id}`).then(data => {
128132
setAuthor(data.author);
129133
});
130134
}, [id]);
131135

132-
return <span>By: {author.name}</span>;
136+
return <span>Par : {author.name}</span>;
133137
}
134138
```
135139
```js
@@ -147,13 +151,13 @@ app.get(`/api/authors/:id`, async (req, res) => {
147151
});
148152
```
149153

150-
With Server Components, you can read the data and render it in the component:
154+
Avec les Composants Serveur, vous pouvez lire les données et les afficher au sein du composant :
151155

152156
```js
153157
import db from './database';
154158

155159
async function Note({id}) {
156-
// NOTE: loads *during* render.
160+
// NOTE : charge *pendant* le rendu.
157161
const note = await db.notes.get(id);
158162
return (
159163
<div>
@@ -164,42 +168,41 @@ async function Note({id}) {
164168
}
165169

166170
async function Author({id}) {
167-
// NOTE: loads *after* Note,
168-
// but is fast if data is co-located.
171+
// NOTE : charge *après* `Note`, mais c'est rapide si les données sont co-localisées.
169172
const author = await db.authors.get(id);
170-
return <span>By: {author.name}</span>;
173+
return <span>Par : {author.name}</span>;
171174
}
172175
```
173176

174-
The bundler then combines the data, rendered Server Components and dynamic Client Components into a bundle. Optionally, that bundle can then be server-side rendered (SSR) to create the initial HTML for the page. When the page loads, the browser does not see the original `Note` and `Author` components; only the rendered output is sent to the client:
177+
Le *bundler* produit ensuite un bundle à partir des données, des Composants Serveur dont le rendu est donc déjà fait, et des Composants Client dynamiques. Ce bundle peut, optionnellement, faire l'objet d'un rendu côté client (SSR) pour produire le HTML initial de la page. Lorsque la page est chargée, le navigateur ne voit pas les composants `Note` et `Author` d'origine ; seul le résultat du rendu est envoyé au client :
175178

176179
```js
177180
<div>
178-
<span>By: The React Team</span>
179-
<p>React 19 is...</p>
181+
<span>Par : L'équipe React</span>
182+
<p>React 19 est...</p>
180183
</div>
181184
```
182185
183-
Server Components can be made dynamic by re-fetching them from a server, where they can access the data and render again. This new application architecture combines the simple “request/response” mental model of server-centric Multi-Page Apps with the seamless interactivity of client-centric Single-Page Apps, giving you the best of both worlds.
186+
Les Composants Serveur peuvent devenir dynamiques en les rechargeant depuis le serveur, au sein duquel ils sont libres d'accéder aux données pour refaire leur rendu. Cette nouvelle architecture d'application combine le modèle mental simple « requête / réponse » des applis multi-page (MPA, *Multi-Page Apps*), centrées sur le serveur, avec l'interactivité fluide des applis mono-page (SPA, *Single-Page Apps*), centrées elles sur le client. Vous obtenez ainsi le meilleur des deux mondes.
184187

185-
### Adding interactivity to Server Components {/*adding-interactivity-to-server-components*/}
188+
### Ajouter de l'interactivité aux Composants Serveur {/*adding-interactivity-to-server-components*/}
186189
187-
Server Components are not sent to the browser, so they cannot use interactive APIs like `useState`. To add interactivity to Server Components, you can compose them with Client Component using the `"use client"` directive.
190+
Les Composants Serveur ne sont pas envoyés au navigateur, ils ne peuvent donc pas utiliser des API interactives telles que `useState`. Pour ajouter de l'interactivité aux Composants Serveur, vous pouvez les composer avec des Composants Client en utilisant la directive `"use client"`.
188191

189192
<Note>
190193

191-
#### There is no directive for Server Components. {/*there-is-no-directive-for-server-components*/}
194+
#### Les Composants Serveur n'ont pas de directive. {/*there-is-no-directive-for-server-components*/}
192195
193-
A common misunderstanding is that Server Components are denoted by `"use server"`, but there is no directive for Server Components. The `"use server"` directive is used for Server Actions.
196+
Une erreur de perception courante veut que les Composants Serveur soient identifié par `"use server"`, mais les Composants Serveur n'ont en fait pas de directive dédiée. La directive `"use server"` est là pour les Actions Serveur.
194197

195-
For more info, see the docs for [Directives](/reference/rsc/directives).
198+
Pour en savoir plus, lisez la documentation des [directives](/reference/rsc/directives).
196199

197200
</Note>
198201

202+
Dans l'exemple qui suit, le Composant Serveur `Notes` importe le Composant Client `Expandable`, lequel utilise un état pour basculer son statut `expanded` :
199203
200-
In the following example, the `Notes` Server Component imports an `Expandable` Client Component that uses state to toggle its `expanded` state:
201204
```js
202-
// Server Component
205+
// Composant Serveur
203206
import Expandable from './Expandable';
204207
205208
async function Notes() {
@@ -208,15 +211,15 @@ async function Notes() {
208211
<div>
209212
{notes.map(note => (
210213
<Expandable key={note.id}>
211-
<p note={note} />
214+
<p>{note}</p>
212215
</Expandable>
213216
))}
214217
</div>
215218
)
216219
}
217220
```
218221
```js
219-
// Client Component
222+
// Composant Client
220223
"use client"
221224
222225
export default function Expandable({children}) {
@@ -226,54 +229,54 @@ export default function Expandable({children}) {
226229
<button
227230
onClick={() => setExpanded(!expanded)}
228231
>
229-
Toggle
232+
Basculer
230233
</button>
231234
{expanded && children}
232235
</div>
233236
)
234237
}
235238
```
236239
237-
This works by first rendering `Notes` as a Server Component, and then instructing the bundler to create a bundle for the Client Component `Expandable`. In the browser, the Client Components will see output of the Server Components passed as props:
240+
Ça fonctionne en faisant d'abord le rendu de `Notes` en tant que Composant Serveur, puis en indiquant au *bundler* de créer un bundle avec le Composant Client `Expandable`. Dans le navigateur, ces Composants Client verront le résultat du rendu des Composants Serveur au travers de leurs props :
238241

239242
```js
240243
<head>
241-
<!-- the bundle for Client Components -->
244+
<!-- le bundle pour les Composants Client -->
242245
<script src="bundle.js" />
243246
</head>
244247
<body>
245248
<div>
246249
<Expandable key={1}>
247-
<p>this is the first note</p>
250+
<p>Voici la première note</p>
248251
</Expandable>
249252
<Expandable key={2}>
250-
<p>this is the second note</p>
253+
<p>Voici la deuxième note</p>
251254
</Expandable>
252255
<!--...-->
253-
</div>
256+
</div>
254257
</body>
255258
```
256259

257-
### Async components with Server Components {/*async-components-with-server-components*/}
260+
### Composants asynchrones et Composants Serveur {/*async-components-with-server-components*/}
258261

259-
Server Components introduce a new way to write Components using async/await. When you `await` in an async component, React will suspend and wait for the promise to resolve before resuming rendering. This works across server/client boundaries with streaming support for Suspense.
262+
Les Composants Serveur apportent une nouvelle façon d'écrire les composants en tirant parti de `async`/`await`. Lorsque vous utilisez `await` au sein d'un composant asynchrone, React le suspend et attend l'accomplissement de la promesse pour reprendre son rendu. Ça peut traverser la frontière client/serveur grâce à la prise en charge du streaming par Suspense.
260263
261-
You can even create a promise on the server, and await it on the client:
264+
Vous pouvez même créer une promesse sur le serveur, et l'attendre côté client :
262265

263266
```js
264-
// Server Component
267+
// Composant Serveur
265268
import db from './database';
266269
267270
async function Page({id}) {
268-
// Will suspend the Server Component.
271+
// Suspendra le Composant Serveur
269272
const note = await db.notes.get(id);
270-
271-
// NOTE: not awaited, will start here and await on the client.
273+
274+
// NOTE : on n’attend pas, on démarre juste. On attendra côté client.
272275
const commentsPromise = db.comments.get(note.id);
273276
return (
274277
<div>
275278
{note}
276-
<Suspense fallback={<p>Loading Comments...</p>}>
279+
<Suspense fallback={<p>Chargement des commentaires...</p>}>
277280
<Comments commentsPromise={commentsPromise} />
278281
</Suspense>
279282
</div>
@@ -282,18 +285,18 @@ async function Page({id}) {
282285
```
283286

284287
```js
285-
// Client Component
288+
// Composant Client
286289
"use client";
287290
import {use} from 'react';
288291
289292
function Comments({commentsPromise}) {
290-
// NOTE: this will resume the promise from the server.
291-
// It will suspend until the data is available.
293+
// NOTE : on reprend la promesse issue du serveur.
294+
// Le composant suspendra le temps que les données deviennent disponibles.
292295
const comments = use(commentsPromise);
293296
return comments.map(commment => <p>{comment}</p>);
294297
}
295298
```
296299

297-
The `note` content is important data for the page to render, so we `await` it on the server. The comments are below the fold and lower-priority, so we start the promise on the server, and wait for it on the client with the `use` API. This will Suspend on the client, without blocking the `note` content from rendering.
300+
Le contenu `note` constitue une donnée important pour le rendu de la page, de sorte qu'on l'attend côté serveur. Mais les commentaires sont sous le *fold* (la limite basse de la fenêtre initiale de visualisation) et sont donc moins prioritaire, de sorte qu'on se contente de démarrer leur chargement côté serveur, pour n'en attendre l'aboutissement que côté client grâce à l'API `use`. Ça suspendra côté client, sans bloquer le rendu initial du contenu `note`.
298301

299-
Since async components are [not supported on the client](#why-cant-i-use-async-components-on-the-client), we await the promise with `use`.
302+
Dans la mesure où les composants asynchrones ne sont pas pris en charge côté client, on attend leur promesse avec `use`.

0 commit comments

Comments
 (0)