0Pricing
React Academy · Leçon

Streaming dans React 18 : fonctionnement de renderToPipeableStream

Comprenez comment renderToPipeableStream envoie progressivement des fragments HTML avant la résolution de toutes les données asynchrones.

Streaming dans React 18 : fonctionnement de renderToPipeableStream est une leçon React Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage React Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours React Academy comprend 4 leçons au total.

Avant React 18 : le goulot d’étranglement synchrone

Avant React 18, le rendu côté serveur utilisait renderToString, qui est synchrone : React rend l’arbre complet des composants sous forme de chaîne avant d’envoyer le moindre HTML au navigateur. Si un composant charge des données, le serveur doit attendre toutes les données avant que le premier octet n’atteigne l’utilisateur.

React 18 : renderToPipeableStream

React 18 a introduit renderToPipeableStream, qui rend l’arbre des composants sous forme de flux de fragments HTML. Au lieu d’attendre que tout soit prêt, React envoie le HTML au fur et à mesure que chaque partie de l’arbre est terminée, ce qui permet au navigateur de commencer immédiatement le rendu du contenu visible.

Anatomie : pipe et abort

renderToPipeableStream renvoie un objet doté de deux méthodes : pipe(writable) et abort(). pipe accepte un flux Writable de Node.js (généralement la réponse HTTP) et commence à y diffuser le HTML. abort() annule le flux : cette méthode est utilisée lorsque la requête est annulée ou qu’un délai d’attente est dépassé.

Ce qui est diffusé en premier : la coquille

Le flux commence par la coquille HTML — tout le contenu qui n’est pas bloqué par une limite Suspense en attente. Cela comprend l’en-tête du document, la navigation, le pied de page, la structure visuelle de la mise en page et tout contenu disponible de manière synchrone. La coquille est diffusée immédiatement, avant la résolution des composants dépendant des données.

Interfaces de remplacement Suspense dans le flux

Les composants situés dans des limites Suspense et en attente de données sont d’abord diffusés avec leur interface de remplacement (par exemple, un indicateur de chargement). React envoie ensuite une balise script qui remplace l’interface de remplacement par le contenu résolu — sans nouveau rendu côté client de la coquille.

bootstrapScripts pour l’hydratation côté client

Transmettez bootstrapScripts: ['/static/js/client.js'] à renderToPipeableStream pour indiquer à React d’injecter une balise script à la fin du flux. Le navigateur charge ce paquet et appelle hydrateRoot, en associant les gestionnaires d’événements de React au DOM rendu par le serveur.

onShellReady : le bon moment pour appeler pipe

onShellReady est exécutée lorsque la coquille HTML (tout ce qui se trouve en dehors des limites Suspense en attente) est prête à être envoyée. C’est le bon moment pour appeler pipe(res) — mais, point important, définissez le code d’état HTTP et les en-têtes de réponse avant d’appeler pipe, car le flux fixe définitivement le code d’état HTTP.

Définir les en-têtes avant le lancement du flux

Comme le lancement du flux commence immédiatement lorsque vous appelez pipe(), toute affectation à res.setHeader ou res.statusCode doit avoir lieu avant l'appel à pipe. Un schéma courant consiste à définir le statut 200 et Content-Type: text/html dans le rappel onShellReady, puis à appeler immédiatement pipe(res).

onShellError : erreurs fatales avant la structure initiale

onShellError se déclenche lorsqu'une erreur irrécupérable survient avant la fin du rendu de la structure initiale — par exemple, lorsqu'un composant de niveau supérieur lève une erreur en dehors de toute limite Suspense. Dans ce cas, vous ne pouvez pas diffuser une réponse partielle ; redirigez plutôt vers une page d'erreur ou envoyez un document HTML statique d'erreur.

onAllReady : pour les robots et les robots d'exploration

onAllReady se déclenche lorsque tout l'arbre React est résolu — y compris toutes les limites Suspense. Pour les robots des moteurs de recherche et les générateurs d'aperçus de liens des réseaux sociaux, vous devez envoyer le HTML complet sans diffusion en flux. Vérifiez si la requête provient d'un robot et appelez pipe(res) dans onAllReady plutôt que dans onShellReady.

Récupération après une erreur pendant la diffusion en flux

onError se déclenche en cas d'erreurs dans les limites Suspense — React peut continuer à diffuser le reste de la page pendant que cette limite affiche son interface d'erreur de secours. Utilisez onError pour consigner l'erreur dans votre chaîne d'observabilité sans interrompre le flux pour l'utilisateur.

onAllReady ou onShellReady

Quand devez-vous utiliser onAllReady plutôt que onShellReady pour commencer à appeler pipe ?

Récapitulatif de la leçon

renderToPipeableStream est la primitive de SSR en flux de React 18 pour les serveurs Node.js. Elle diffuse immédiatement la structure HTML via onShellReady, complète les limites Suspense au fur et à mesure de la résolution des données et hydrate le client via bootstrapScripts. Utilisez onAllReady pour les robots et les robots d'exploration, onShellError en cas d'échec fatal et définissez toujours les en-têtes HTTP avant d'appeler pipe().

Questions Fréquemment Posées

La leçon « Streaming dans React 18 : fonctionnement de renderToPipeableStream » est-elle gratuite ?

Oui — le texte complet de « Streaming dans React 18 : fonctionnement de renderToPipeableStream » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours React Academy, passe à CoddyKit PRO. Le cours React Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Streaming dans React 18 : fonctionnement de renderToPipeableStream » ?

Comprenez comment renderToPipeableStream envoie progressivement des fragments HTML avant la résolution de toutes les données asynchrones. Tu pratiques React Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer React Academy ?

Aucune expérience préalable n'est requise. React Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Streaming dans React 18 : fonctionnement de renderToPipeableStream » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon React Academy ?

Oui. Chaque leçon React Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Streaming dans React 18 : fonctionnement de renderToPipeableStream
  2. Limites Suspense et priorité du streaming
  3. Hydratation progressive avec hydratation sélective
  4. Mesurer l’impact du streaming : FCP, TTI et LCP
← Retour à React Academy