0Pricing
React Academy · Aula

Transmissão no React 18: como funciona renderToPipeableStream

Entenda como renderToPipeableStream libera progressivamente blocos HTML antes que todos os dados assíncronos sejam resolvidos.

Transmissão no React 18: como funciona renderToPipeableStream é uma aula grátis de React Academy no CoddyKit. Esta é a aula 1 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de React Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de React Academy inclui 4 aulas no total.

Antes do React 18: o gargalo síncrono

Antes do React 18, a renderização no servidor usava renderToString, que é síncrono: o React renderiza toda a árvore de componentes em uma string antes de enviar qualquer HTML ao navegador. Se algum componente carregar dados, o servidor deverá aguardar todos os dados antes que o primeiro byte chegue ao usuário.

React 18: renderToPipeableStream

O React 18 introduziu renderToPipeableStream, que renderiza a árvore de componentes como um fluxo de blocos HTML. Em vez de aguardar tudo ficar pronto, o React envia HTML à medida que conclui cada parte da árvore, permitindo que o navegador comece a renderizar imediatamente o conteúdo visível.

A anatomia: pipe e abort

renderToPipeableStream retorna um objeto com dois métodos: pipe(writable) e abort(). pipe aceita um fluxo gravável do Node.js (normalmente a resposta HTTP) e começa a transmitir HTML para ele. abort() cancela o fluxo, sendo usado quando a solicitação é cancelada ou quando um tempo limite é excedido.

O que é transmitido primeiro: a estrutura inicial

O fluxo começa com a estrutura inicial HTML — todo o conteúdo que não está bloqueado por um limite Suspense pendente. Isso inclui o cabeçalho do documento, a navegação, o rodapé, os elementos estruturais do layout e qualquer conteúdo disponível de forma síncrona. A estrutura inicial é transmitida imediatamente, antes que qualquer componente dependente de dados seja resolvido.

Reservas do Suspense no fluxo

Os componentes dentro de limites Suspense que aguardam dados são inicialmente transmitidos com sua interface de reserva (por exemplo, um indicador de carregamento). O React envia posteriormente um elemento script que substitui a interface de reserva pelo conteúdo resolvido — tudo isso sem uma nova renderização da estrutura inicial no cliente.

bootstrapScripts para hidratação no cliente

Passe bootstrapScripts: ['/static/js/client.js'] para renderToPipeableStream para informar ao React que deve injetar um elemento script no final do fluxo. O navegador carrega esse pacote e chama hydrateRoot, associando os manipuladores de eventos do React ao DOM renderizado no servidor.

onShellReady: o momento certo para iniciar a transmissão

onShellReady é acionado quando a estrutura inicial HTML (tudo fora dos limites Suspense pendentes) está pronta para ser enviada. Esse é o momento correto para chamar pipe(res) — mas, principalmente, defina o código de status HTTP e os cabeçalhos da resposta antes de chamar pipe, pois a transmissão fixa o status HTTP.

Definir Cabeçalhos Antes da Transmissão em Fluxo

Como a transmissão em fluxo começa imediatamente quando você chama pipe(), qualquer atribuição a res.setHeader ou res.statusCode deve acontecer antes da chamada a pipe. Um padrão comum é definir o status como 200 e Content-Type: text/html no retorno de chamada onShellReady e, em seguida, chamar pipe(res) imediatamente.

onShellError: Erros Fatais Antes da Estrutura Inicial

onShellError é acionado quando ocorre um erro irrecuperável antes de a estrutura inicial terminar de ser renderizada — por exemplo, quando um componente de nível superior lança um erro fora de qualquer limite Suspense. Nesse caso, você não pode transmitir uma resposta parcial; em vez disso, redirecione para uma página de erro ou envie um documento HTML estático de erro.

onAllReady: Para Robôs e Rastreadores

onAllReady é acionado quando toda a árvore do React foi resolvida — incluindo todos os limites Suspense. Para rastreadores de mecanismos de busca e ferramentas de visualização prévia de links em redes sociais, convém enviar o HTML completo sem transmissão em fluxo. Verifique se a solicitação vem de um robô e chame pipe(res) em onAllReady, em vez de onShellReady.

Recuperação de Erros Durante a Transmissão em Fluxo

onError é acionado para erros nos limites Suspense — o React ainda pode transmitir o restante da página enquanto esse limite exibe sua interface alternativa de erro. Use onError para registrar o erro no seu fluxo de observabilidade sem interromper a transmissão para o usuário.

onAllReady versus onShellReady

Quando você deve usar onAllReady em vez de onShellReady para iniciar o envio por pipe?

Resumo da Lição

renderToPipeableStream é a primitiva de SSR em transmissão em fluxo do React 18 para servidores Node.js. Ela transmite a estrutura inicial do HTML imediatamente por meio de onShellReady, preenche os limites Suspense conforme os dados são resolvidos e hidrata o cliente por meio de bootstrapScripts. Use onAllReady para robôs e rastreadores, onShellError para falhas fatais e sempre defina os cabeçalhos HTTP antes de chamar pipe().

Perguntas Frequentes

A aula “Transmissão no React 18: como funciona renderToPipeableStream” é grátis?

Sim — o texto completo de “Transmissão no React 18: como funciona renderToPipeableStream” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de React Academy, atualize para CoddyKit PRO. O curso de React Academy inclui 4 aulas no total.

O que vou aprender em “Transmissão no React 18: como funciona renderToPipeableStream”?

Entenda como renderToPipeableStream libera progressivamente blocos HTML antes que todos os dados assíncronos sejam resolvidos. Você pratica React Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar React Academy?

Nenhuma experiência prévia é necessária. React Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 1 de 4.

Quanto tempo leva a aula “Transmissão no React 18: como funciona renderToPipeableStream”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de React Academy?

Sim. Cada aula de React Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Transmissão no React 18: como funciona renderToPipeableStream
  2. Limites de Suspense e prioridade de transmissão
  3. Hidratação progressiva com hidratação seletiva
  4. Medindo o impacto da transmissão: FCP, TTI e LCP
← Voltar para React Academy