logo
  • Guide
  • Config
  • Plugin
  • API
  • Examples
  • Community
  • Modern.js 2.x Docs
  • English
    • 简体中文
    • English
    • Commands
      File Conventions
      src/
      App.[tj]sx
      entry.[tj]s
      entry.server.[tj]sx
      modern.runtime.[tj]s
      routes/
      *.[server|node].[tj]sx
      api/
      lambda/*.[tj]s
      server/
      modern.server.[tj]s
      shared/
      config/
      html/
      favicon.*
      icon.*
      mock/
      public/
      upload/
      modern.config.[tj]s
      Runtime
      Core
      createRoot
      render
      Router
      router
      SSR
      NoSSR
      renderStreaming
      renderString
      createRequestHandler
      BFF
      useHonoContext
      Utility
      CSS-In-JS API
      Head
      loadable
      📝 Edit this page
      Previous pageNoSSRNext pagerenderString

      #renderStreaming

      Used for React v18+ Streaming SSR to render readable streams, used in conjunction with createRequestHandler.

      #Usage

      src/entry.server.tsx
      import {
        renderStreaming,
        createRequestHandler,
      } from '@modern-js/runtime/ssr/server';
      
      const handleRequest = async (request, ServerRoot, options) => {
        const stream = await renderStreaming(request, <ServerRoot />, options);
      
        return new Response(stream, {
          headers: {
            'content-type': 'text/html; charset=utf-8',
          },
        });
      };
      
      export default createRequestHandler(handleRequest);

      #Function Signature

      export type RenderStreaming = (
        request: Request,
        serverRoot: React.ReactElement,
        optinos: RenderOptions,
      ) => Promise<ReadableStream>;

      #Example

      src/entry.server.tsx
      import {
        renderStreaming,
        createRequestHandler,
      } from '@modern-js/runtime/ssr/server';
      
      const handleRequest = async (request, ServerRoot, options) => {
        // do something before render
        const stream = await renderStreaming(request, <ServerRoot />, options);
      
        // docs: https://developer.mozilla.org/en-US/docs/Web/API/TransformStream
        const transformStream = new TransformStream({
          transform(chunk, controller) {
            // do some transform
          },
        });
      
        stream.pipeThrough(transformStream);
      
        return new Response(transformStream.readable, {
          headers: {
            'content-type': 'text/html; charset=utf-8',
          },
        });
      };
      
      export default createRequestHandler(handleRequest);