ReactDOMServer
El objeto ReactDOMServer
te permite renderizar componentes a un marcado estático. Normalmente, se usa en un servidor de Node:
<<<<<<< HEAD
// módulos ES
import ReactDOMServer from 'react-dom/server';
=======
// ES modules
import * as ReactDOMServer from 'react-dom/server';
>>>>>>> 84ad3308338e2bb819f4f24fa8e9dfeeffaa970b
// CommonJS
var ReactDOMServer = require('react-dom/server');
Resumen
<<<<<<< HEAD Los siguientes métodos se pueden utilizar tanto en el servidor como en el entorno del navegador: ======= These methods are only available in the environments with Node.js Streams:
These methods are only available in the environments with Web Streams (this includes browsers, Deno, and some modern edge runtimes):
The following methods can be used in the environments that don’t support streams:
84ad3308338e2bb819f4f24fa8e9dfeeffaa970b
<<<<<<< HEAD
Estos métodos adicionales dependen de un paquete (stream
) que solo está disponible en el servidor, y no funcionará en el navegador.
renderToPipeableStream()
renderToReadableStream()
renderToNodeStream()
(Deprecated)renderToStaticNodeStream()
Referencia
renderToString()
ReactDOMServer.renderToString(element)
Renderiza un elemento React a su HTML inicial. React devolverá HTML en una cadena de texto. Puedes usar este método para generar HTML en el servidor y enviar el marcado en la solicitud inicial para que las páginas se carguen más rápido y permitir que los motores de búsqueda rastreen tus páginas con fines de SEO.
Si llamas ReactDOM.hydrateRoot()
a un nodo que ya tiene este marcado desde el servidor, React lo conservará y solo adjuntará los controladores de eventos, lo que te permitirá tener una experiencia de primera carga muy eficaz.
renderToStaticMarkup()
ReactDOMServer.renderToStaticMarkup(element)
Similar a renderToString
, excepto que esto no crea atributos DOM adicionales que React usa internamente, como data-reactroot
. Esto es útil si desea utilizar React como un simple generador de páginas estáticas, ya que eliminar los atributos adicionales puede ahorrar algunos bytes.
Si planeas usar React en el cliente para hacer que el marcado sea interactivo, no use este método. En su lugar, use renderToString
en el servidor y ReactDOM.hydrateRoot()
en el cliente.
=======
Reference
84ad3308338e2bb819f4f24fa8e9dfeeffaa970b
renderToPipeableStream()
ReactDOMServer.renderToPipeableStream(element, options)
Render a React element to its initial HTML. Returns a stream with a pipe(res)
method to pipe the output and abort()
to abort the request. Fully supports Suspense and streaming of HTML with “delayed” content blocks “popping in” via inline <script>
tags later. Read more
If you call ReactDOM.hydrateRoot()
on a node that already has this server-rendered markup, React will preserve it and only attach event handlers, allowing you to have a very performant first-load experience.
let didError = false;
const stream = renderToPipeableStream(
<App />,
{
onShellReady() {
// The content above all Suspense boundaries is ready.
// If something errored before we started streaming, we set the error code appropriately.
res.statusCode = didError ? 500 : 200;
res.setHeader('Content-type', 'text/html');
stream.pipe(res);
},
onShellError(error) {
// Something errored before we could complete the shell so we emit an alternative shell.
res.statusCode = 500;
res.send(
'<!doctype html><p>Loading...</p><script src="clientrender.js"></script>'
);
},
onAllReady() {
// If you don't want streaming, use this instead of onShellReady.
// This will fire after the entire page content is ready.
// You can use this for crawlers or static generation.
// res.statusCode = didError ? 500 : 200;
// res.setHeader('Content-type', 'text/html');
// stream.pipe(res);
},
onError(err) {
didError = true;
console.error(err);
},
}
);
See the full list of options.
Note:
This is a Node.js-specific API. Environments with Web Streams, like Deno and modern edge runtimes, should use
renderToReadableStream
instead.
renderToReadableStream()
ReactDOMServer.renderToReadableStream(element, options);
Streams a React element to its initial HTML. Returns a Promise that resolves to a Readable Stream. Fully supports Suspense and streaming of HTML. Read more
If you call ReactDOM.hydrateRoot()
on a node that already has this server-rendered markup, React will preserve it and only attach event handlers, allowing you to have a very performant first-load experience.
let controller = new AbortController();
let didError = false;
try {
let stream = await renderToReadableStream(
<html>
<body>Success</body>
</html>,
{
signal: controller.signal,
onError(error) {
didError = true;
console.error(error);
}
}
);
// This is to wait for all Suspense boundaries to be ready. You can uncomment
// this line if you want to buffer the entire HTML instead of streaming it.
// You can use this for crawlers or static generation:
// await stream.allReady;
return new Response(stream, {
status: didError ? 500 : 200,
headers: {'Content-Type': 'text/html'},
});
} catch (error) {
return new Response(
'<!doctype html><p>Loading...</p><script src="clientrender.js"></script>',
{
status: 500,
headers: {'Content-Type': 'text/html'},
}
);
}
See the full list of options.
Note:
This API depends on Web Streams. For Node.js, use
renderToPipeableStream
instead.
renderToNodeStream()
(Deprecated)
ReactDOMServer.renderToNodeStream(element)
<<<<<<< HEAD
Renderiza un elemento React a su HTML inicial. Devuelve una Secuencia de lectura que genera una cadena HTML. La salida HTML de este flujo es exactamente igual a lo que devolvería ReactDOMServer.renderToString
Puede usar este método para generar HTML en el servidor y enviar el marcado en la solicitud inicial para que las páginas se carguen más rápido y permitir que los motores de búsqueda rastreen sus páginas con fines de SEO.
=======
Render a React element to its initial HTML. Returns a Node.js Readable stream that outputs an HTML string. The HTML output by this stream is exactly equal to what ReactDOMServer.renderToString
would return. You can use this method to generate HTML on the server and send the markup down on the initial request for faster page loads and to allow search engines to crawl your pages for SEO purposes.
84ad3308338e2bb819f4f24fa8e9dfeeffaa970b
Si llamas ReactDOM.hydrateRoot()
en un nodo que ya tiene este marcado de servidor, React lo conservará y solo adjuntará controladores de eventos, lo que te permitirá tener una experiencia de primera carga muy eficaz.
Nota:
Solo para el servidor. Esta API no está disponible en el navegador.
El flujo devuelto por este método devolverá un flujo de bytes codificado en utf-8. Si necesita un flujo en otra codificación, observa un proyecto como iconv-lite, que proporciona flujos de transformación para la transcodificación de texto.
renderToStaticNodeStream()
ReactDOMServer.renderToStaticNodeStream(element)
Similar a renderToNodeStream
, excepto que esto no crea atributos DOM adicionales que React usa internamente, como data-reactroot
. Esto es útil si desea utilizar React como un simple generador de páginas estáticas, ya que eliminar los atributos adicionales puede ahorrar algunos bytes.
La salida HTML de este flujo es exactamente igual a lo que ReactDOMServer.renderToStaticMarkup
devolvería.
Si planeas usar React en el cliente para hacer que el marcado sea interactivo, no use este método. En su lugar, utilice renderToNodeStream
en el servidor y ReactDOM.hydrateRoot()
en el cliente.
Nota:
Solo para el servidor. Esta API no está disponible en el navegador.
<<<<<<< HEAD El flujo devuelto por este método devolverá un flujo de bytes codificado en utf-8. Si necesita un flujo en otra codificación, observa un proyecto como iconv-lite, que proporciona flujos de transformación para la transcodificación de texto. ======= The stream returned from this method will return a byte stream encoded in utf-8. If you need a stream in another encoding, take a look at a project like iconv-lite, which provides transform streams for transcoding text.
renderToString()
ReactDOMServer.renderToString(element)
Render a React element to its initial HTML. React will return an HTML string. You can use this method to generate HTML on the server and send the markup down on the initial request for faster page loads and to allow search engines to crawl your pages for SEO purposes.
If you call ReactDOM.hydrateRoot()
on a node that already has this server-rendered markup, React will preserve it and only attach event handlers, allowing you to have a very performant first-load experience.
Note
This API has limited Suspense support and does not support streaming.
On the server, it is recommended to use either
renderToPipeableStream
(for Node.js) orrenderToReadableStream
(for Web Streams) instead.
renderToStaticMarkup()
ReactDOMServer.renderToStaticMarkup(element)
Similar to renderToString
, except this doesn’t create extra DOM attributes that React uses internally, such as data-reactroot
. This is useful if you want to use React as a simple static page generator, as stripping away the extra attributes can save some bytes.
If you plan to use React on the client to make the markup interactive, do not use this method. Instead, use renderToString
on the server and ReactDOM.hydrateRoot()
on the client.
84ad3308338e2bb819f4f24fa8e9dfeeffaa970b