renderToStaticNodeStream

renderToStaticNodeStream γ―γ€ιžγ‚€γƒ³γ‚Ώγƒ©γ‚―γƒ†γ‚£γƒ–γͺ React ツγƒͺγƒΌγ‚’ Node.js οΏ½? Readable γ‚ΉγƒˆγƒͺγƒΌγƒ  にレンダーします。

const stream = renderToStaticNodeStream(reactNode)

γƒͺフゑレンス

renderToStaticNodeStream(reactNode)

γ‚΅γƒΌγƒδΈŠγ«γŠγ„γ¦γ€renderToStaticNodeStream を呼び出して Node.js οΏ½? Readable γ‚Ήγƒˆγƒͺームを取得します。

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

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

さらに例を見る

こ�?γ‚Ήγƒˆγƒͺームは、React γ‚³γƒ³γƒγƒΌγƒγƒ³γƒˆοΏ½?ιžγ‚€γƒ³γ‚Ώγƒ©γ‚―γƒ†γ‚£γƒ–γͺ HTML ε‡ΊεŠ›γ‚’η”Ÿζˆγ—γΎγ™γ€‚

εΌ•ζ•°

  • reactNode: HTML γ«γƒ¬γƒ³γƒ€γƒΌγ—γŸγ„ React γƒŽγƒΌγƒ‰γ€‚δΎ‹γˆγ°γ€<Page /> οΏ½?γ‚ˆγ†γͺ JSX 要素。

θΏ”γ‚Šε€€

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 を使用すべきです。