Skip to content

Commit 72e258e

Browse files
authored
Traducción de documentación sobre React Server Components (#987)
1 parent e727859 commit 72e258e

File tree

1 file changed

+49
-49
lines changed

1 file changed

+49
-49
lines changed

src/content/reference/rsc/server-components.md

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -4,42 +4,42 @@ title: Server Components
44

55
<RSC>
66

7-
Server Components are for use in [React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
7+
Los Server Components son para usarse en [React Server Components](/learn/start-a-new-react-project#bleeding-edge-react-frameworks).
88

99
</RSC>
1010

1111
<Intro>
1212

13-
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.
13+
Los Server Components son un nuevo tipo de Componente que se renderizan con antelación, antes del empaquetado, en un entorno separado de tu aplicación en el cliente o servidor SSR.
1414

1515
</Intro>
1616

17-
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.
17+
Este entorno separado es el "servidor" en React Server Components. Los Server Components pueden ejecutarse una vez en el momento de la compilación en su servidor CI, o pueden ejecutarse para cada solicitud utilizando un servidor web.
1818

1919
<InlineToc />
2020

2121
<Note>
2222

23-
#### How do I build support for Server Components? {/*how-do-i-build-support-for-server-components*/}
23+
#### ¿Cómo se crea la compatibilidad para los Server Components? {/*how-do-i-build-support-for-server-components*/}
2424

25-
While React Server Components in React 19 are stable and will not break between minor 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.
25+
Mientras que los React Server Components en React 19 son estables y no se romperán entre versiones menores, las API subyacentes utilizadas para implementar un bundler o framework de React Server Components no siguen un versionado semántico y pueden romperse entre versiones menores en React 19.x.
2626

27-
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.
27+
Para soportar React Server Components como bundler o framework, recomendamos usar una versión específica de React, o usar la versión Canary. Seguiremos trabajando con bundlers y frameworks para estabilizar las API utilizadas para implementar React Server Components en el futuro.
2828

2929
</Note>
3030

31-
### Server Components without a Server {/*server-components-without-a-server*/}
32-
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.
31+
### Server Components sin Servidor {/*server-components-without-a-server*/}
32+
Los Server components pueden ejecutarse en tiempo de compilación para leer del sistema de archivos u obtener contenido estático, por lo que no es necesario un servidor web. Por ejemplo, es posible que desee leer datos estáticos de un sistema de gestión de contenidos.
3333

34-
Without Server Components, it's common to fetch static data on the client with an Effect:
34+
Sin Server Components, es común obtener datos estáticos en el cliente con un efecto:
3535
```js
3636
// bundle.js
3737
import marked from 'marked'; // 35.9K (11.2K gzipped)
3838
import sanitizeHtml from 'sanitize-html'; // 206K (63.3K gzipped)
3939

4040
function Page({page}) {
4141
const [content, setContent] = useState('');
42-
// NOTE: loads *after* first page render.
42+
// NOTA: se carga *después* del primer renderizado.
4343
useEffect(() => {
4444
fetch(`/api/content/${page}`).then((data) => {
4545
setContent(data.content);
@@ -58,56 +58,56 @@ app.get(`/api/content/:page`, async (req, res) => {
5858
});
5959
```
6060

61-
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.
61+
Este patrón significa que los usuarios tienen que descargar y analizar 75K adicionales (comprimidos en gzip) de bibliotecas, y esperar por una segunda petición para obtener los datos después de que se cargue la página, sólo para representar contenido estático que no cambiará durante el ciclo de vida de la página.
6262

63-
With Server Components, you can render these components once at build time:
63+
Con Server Components, puedes renderizar estos componentes una vez en el tiempo de compilación:
6464

6565
```js
66-
import marked from 'marked'; // Not included in bundle
67-
import sanitizeHtml from 'sanitize-html'; // Not included in bundle
66+
import marked from 'marked'; // No incluido en el paquete
67+
import sanitizeHtml from 'sanitize-html'; // No incluido en el paquete
6868

6969
async function Page({page}) {
70-
// NOTE: loads *during* render, when the app is built.
70+
// NOTA: se carga *durante* el renderizado, cuando se construye la aplicación.
7171
const content = await file.readFile(`${page}.md`);
7272

7373
return <div>{sanitizeHtml(marked(content))}</div>;
7474
}
7575
```
7676

77-
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:
77+
El resultado renderizado puede entonces ser renderizado del lado del servidor (SSR) a HTML y subido a un CDN. Cuando se cargue la aplicación, el cliente no verá el componente original `Page`, ni las costosas librerías para renderizar el markdown. El cliente sólo verá el resultado renderizado:
7878

7979
```js
8080
<div><!-- html for markdown --></div>
8181
```
8282

83-
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.
83+
Esto significa que el contenido es visible durante la primera carga de la página, y el paquete no incluye las costosas bibliotecas necesarias para renderizar el contenido estático.
8484

8585
<Note>
8686

87-
You may notice that the Server Component above is an async function:
87+
Quizá pudiste notar que el Server Component de arriba es una función asíncrona:
8888

8989
```js
9090
async function Page({page}) {
9191
//...
9292
}
9393
```
9494

95-
Async Components are a new feature of Server Components that allow you to `await` in render.
95+
Los Componentes Asíncronos son una nueva característica de los Server Components que te permiten `esperar` en el renderizado.
9696

97-
See [Async components with Server Components](#async-components-with-server-components) below.
97+
Véase [Componentes asíncronos con Server Components](#async-components-with-server-components) más abajo.
9898

9999
</Note>
100100

101-
### Server Components with a Server {/*server-components-with-a-server*/}
102-
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.
101+
### Server Components con Servidor {/*server-components-with-a-server*/}
102+
Los Server Components también pueden ejecutarse en un servidor web durante la solicitud de una página, lo que te permite acceder a la capa de datos sin tener que crear una API. Se renderizan antes de empaquetar la aplicación y pueden pasar datos y JSX como props a los Client Components.
103103

104-
Without Server Components, it's common to fetch dynamic data on the client in an Effect:
104+
Sin Server Components, es común obtener datos dinámicos en el cliente en un Efecto:
105105

106106
```js
107107
// bundle.js
108108
function Note({id}) {
109109
const [note, setNote] = useState('');
110-
// NOTE: loads *after* first render.
110+
// NOTA: se carga *después* del primer renderizado.
111111
useEffect(() => {
112112
fetch(`/api/notes/${id}`).then(data => {
113113
setNote(data.note);
@@ -124,8 +124,8 @@ function Note({id}) {
124124

125125
function Author({id}) {
126126
const [author, setAuthor] = useState('');
127-
// NOTE: loads *after* Note renders.
128-
// Causing an expensive client-server waterfall.
127+
// NOTA: se carga *después* del renderizado de Note.
128+
// Provocando una costosa cascada cliente-servidor.
129129
useEffect(() => {
130130
fetch(`/api/authors/${id}`).then(data => {
131131
setAuthor(data.author);
@@ -150,13 +150,13 @@ app.get(`/api/authors/:id`, async (req, res) => {
150150
});
151151
```
152152

153-
With Server Components, you can read the data and render it in the component:
153+
Con Server Components, puedes leer los datos y representarlos en el componente:
154154

155155
```js
156156
import db from './database';
157157

158158
async function Note({id}) {
159-
// NOTE: loads *during* render.
159+
// NOTA: se carga *durante* el renderizado.
160160
const note = await db.notes.get(id);
161161
return (
162162
<div>
@@ -167,14 +167,14 @@ async function Note({id}) {
167167
}
168168

169169
async function Author({id}) {
170-
// NOTE: loads *after* Note,
171-
// but is fast if data is co-located.
170+
// NOTA: se carga *después* de Note,
171+
// pero es rápido si los datos están ubicados en el mismo lugar.
172172
const author = await db.authors.get(id);
173173
return <span>By: {author.name}</span>;
174174
}
175175
```
176176

177-
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+
El bundler luego combina los datos, los Server Components renderizados y los Client Components dinámicos en un paquete. Opcionalmente, ese paquete puede ser renderizado del lado del servidor (SSR) para crear el HTML inicial de la página. Cuando se carga la página, el navegador no ve los componentes originales `Note` y `Author`; sólo se envía al cliente la salida renderizada:
178178

179179
```js
180180
<div>
@@ -183,24 +183,24 @@ The bundler then combines the data, rendered Server Components and dynamic Clien
183183
</div>
184184
```
185185

186-
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+
Los Server Components pueden hacerse dinámicos al recuperarlos de un servidor, donde pueden acceder a los datos y renderizarse de nuevo. Esta nueva arquitectura de aplicaciones combina el sencillo modelo mental "solicitud/respuesta" de las Multi-Page Applications (MPA) centradas en el servidor con la interactividad fluida de las Single Page Applications (SPA) centradas en el cliente, ofreciéndole lo mejor de ambos mundos.
187187

188-
### Adding interactivity to Server Components {/*adding-interactivity-to-server-components*/}
188+
### Añadir interactividad a los Server Components {/*adding-interactivity-to-server-components*/}
189189

190-
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+
Los Server Components no se envían al navegador, por lo que no pueden utilizar APIs interactivas como `useState`. Para añadir interactividad a los Server Components, puede componerlos con Client Component utilizando la directiva `"use client"`.
191191

192192
<Note>
193193

194-
#### There is no directive for Server Components. {/*there-is-no-directive-for-server-components*/}
194+
#### No hay directiva para los Server Components. {/*there-is-no-directive-for-server-components*/}
195195

196-
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 Functions.
196+
Un malentendido común es que los Server Components se denotan por `"use server"`, pero no hay directiva para Server Components. La directiva `"use server"` se utiliza para las Server Functions.
197197

198-
For more info, see the docs for [Directives](/reference/rsc/directives).
198+
Para más información, consulte la documentación de [Directivas](/reference/rsc/directives).
199199

200200
</Note>
201201

202202

203-
In the following example, the `Notes` Server Component imports an `Expandable` Client Component that uses state to toggle its `expanded` state:
203+
En el siguiente ejemplo, el Server Component `Notes` importa un Client Component `Expandable` que utiliza el estado para cambiar su estado `expanded`:
204204
```js
205205
// Server Component
206206
import Expandable from './Expandable';
@@ -237,11 +237,11 @@ export default function Expandable({children}) {
237237
}
238238
```
239239

240-
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+
Esto funciona renderizando primero `Notes` como un Server Component, y luego instruyendo al bundler para que cree un bundle para el Client Component `Expandable`. En el navegador, los Client Component verán la salida de los Server Component pasados como props:
241241

242242
```js
243243
<head>
244-
<!-- the bundle for Client Components -->
244+
<!-- el bundle para Client Components -->
245245
<script src="bundle.js" />
246246
</head>
247247
<body>
@@ -257,21 +257,21 @@ This works by first rendering `Notes` as a Server Component, and then instructin
257257
</body>
258258
```
259259

260-
### Async components with Server Components {/*async-components-with-server-components*/}
260+
### Componentes asíncronos con Server Components {/*async-components-with-server-components*/}
261261

262-
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+
Los Server Components introducen una nueva forma de escribir Componentes usando async/await. Cuando `esperas` en un componente asíncrono, React suspenderá y esperará a que la promesa se resuelva antes de reanudar la renderización. Esto funciona a través de los límites de servidor/cliente con soporte de streaming para Suspense.
263263

264-
You can even create a promise on the server, and await it on the client:
264+
Incluso puedes crear una promesa en el servidor y esperarla en el cliente:
265265

266266
```js
267267
// Server Component
268268
import db from './database';
269269

270270
async function Page({id}) {
271-
// Will suspend the Server Component.
271+
// Suspenderá el Server Component.
272272
const note = await db.notes.get(id);
273273

274-
// NOTE: not awaited, will start here and await on the client.
274+
// NOTA: no se espera, se iniciará aquí y se esperará en el cliente.
275275
const commentsPromise = db.comments.get(note.id);
276276
return (
277277
<div>
@@ -290,13 +290,13 @@ async function Page({id}) {
290290
import {use} from 'react';
291291

292292
function Comments({commentsPromise}) {
293-
// NOTE: this will resume the promise from the server.
294-
// It will suspend until the data is available.
293+
// NOTA: esto reanudará la promesa desde el servidor.
294+
// Se suspenderá hasta que los datos estén disponibles.
295295
const comments = use(commentsPromise);
296296
return comments.map(commment => <p>{comment}</p>);
297297
}
298298
```
299299

300-
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+
El contenido de `note` es un dato importante para que la página se renderice, así que lo `esperamos` en el servidor. Los comentarios están por debajo del pliegue y son de menor prioridad, así que iniciamos la promesa en el servidor, y la esperamos en el cliente con la `use` API. Esto Suspenderá en el cliente, sin bloquear el contenido `note` de la renderización.
301301

302-
Since async components are not supported on the client, we await the promise with `use`.
302+
Dado que los componentes asíncronos no están soportados en el cliente, esperamos la promesa con `use`.

0 commit comments

Comments
 (0)