renderToStaticNodeStream

renderToStaticNodeStream は、非インタラクティブな React ツリーを Node.js の Readable ストリーム にレンダーします。

const stream = renderToStaticNodeStream(reactNode, options?)

リファレンス

renderToStaticNodeStream(reactNode, options?)

サーバ上において、renderToStaticNodeStream を呼び出して Node.js の Readable ストリームを取得します。

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

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

さらに例を見る

このストリームは、React コンポーネントの非インタラクティブな HTML 出力を生成します。

引数

  • reactNode: HTML にレンダーしたい React ノード。例えば、<Page /> のような JSX 要素。

  • 省略可能 options: サーバレンダー用のオプションが含まれたオブジェクト。

    • 省略可能 identifierPrefix: React が useId によって生成する ID に使用する文字列プレフィックス。同じページ上に複数のルートを使用する際に、競合を避けるために用います。

返り値

HTML 文字列を出力する Node.js の Readable ストリーム。結果として得られる HTML はクライアント上でハイドレーションすることはできません。

注意点

  • renderToStaticNodeStream の出力はハイドレーションすることができません。

  • このメソッドは、すべてのサスペンスバウンダリが完了するまで出力を返さずに待機します。

  • React 18 時点において、このメソッドはすべての出力をバッファリングするため、実際にはストリームを使用する利点が得られません。

  • 返されるストリームは utf-8 でエンコードされたバイトストリームです。他のエンコーディングのストリームが必要な場合は、テキストのトランスコーディング用の変換ストリームを提供する iconv-lite のようなプロジェクトを参照してください。


使用法

React ツリーを静的 HTML として Node.js の Readable ストリームにレンダーする

renderToStaticNodeStream を呼び出して、サーバからのレスポンスにパイプできる Node.js の Readable ストリームを取得します。

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

// The route handler syntax depends on your backend framework
app.use('/', (request, response) => {
const stream = renderToStaticNodeStream(<Page />);
stream.pipe(response);
});

このストリームは、React コンポーネントの非インタラクティブな初期 HTML 出力を生成します。

落とし穴

このメソッドは、ハイドレーションができない非インタラクティブな HTML をレンダーします。これは、React をシンプルな静的ページジェネレータとして使用したい場合や、メールのような完全に静的なコンテンツをレンダーする場合に有用です。

インタラクティブなアプリでは、サーバ上で renderToPipeableStream を、クライアント上で hydrateRoot を使用すべきです。