renderToStaticNodeStream fait le rendu non interactif d’une arborescence React dans un flux Node.js en lecture.

const stream = renderToStaticNodeStream(reactNode)

Référence

renderToStaticNodeStream(reactNode)

Côté serveur, appelez renderToStaticNodeStream pour obtenir un flux Node.js en lecture.

import { renderToStaticNodeStream } from 'react-dom/server';

const stream = renderToStaticNodeStream(<Page />);
stream.pipe(response);

Voir d’autres exemples ci-dessous.

Le flux émettra le HTML non interactif de vos composants React.

Paramètres

  • reactNode : un nœud React dont vous voulez obtenir le HTML. Ça pourrait par exemple être un nœud JSX tel que <Page />.

Valeur renvoyée

Un flux Node.js en lecture qui émet le texte HTML. Le HTML obtenu ne peut pas être hydraté côté client.

Limitations

  • Le résultat de renderToStaticNodeStream ne peut pas être hydraté.

  • Cette méthode attendra que tous les périmètres Suspense aboutissent avant de renvoyer quelque contenu que ce soit.

  • À partir de React 18, cette méthode met en tampon toute sa sortie, elle n’a donc pas à proprement parler les avantages du streaming.

  • Le flux renvoyé est encodé en UTF-8. Si vous avez besoin d’un flux avec un autre encodage, regardez les projets tels qu’iconv-lite, qui fournissent des flux de transformation pour le transcodage de textes.


Utilisation

Produire le HTML statique d’un arbre React dans un flux Node.js en lecture

Appelez renderToStaticNodeStream pour obtenir un flux Node.js en lecture que vous pourrez connecter (pipe, NdT) à votre réponse serveur :

import { renderToStaticNodeStream } from 'react-dom/server';

// La syntaxe du gestionnaire de routes dépend de votre framework côté serveur
app.use('/', (request, response) => {
const stream = renderToStaticNodeStream(<Page />);
stream.pipe(response);
});

Le flux produira le HTML initial, non interactif, de vos composants React.

Piège

Cette méthode produit du HTML non interactif qui ne pourra pas être hydraté. C’est pratique si vous souhaitez utiliser React comme un simple générateur de pages statiques, ou si vous affichez des contenus totalement statiques tels que des e-mails.

Les applis interactives devraient plutôt utiliser renderToPipeableStream côté serveur, couplé à hydrateRoot côté client.