renderToString
renderToString γ― React γγͺγΌγ HTML ζεεγ«γ¬γ³γγΌγγΎγγ
const html = renderToString(reactNode)γͺγγ‘γ¬γ³γΉ
renderToString(reactNode)
γ΅γΌγδΈγ«γγγ¦γrenderToString γεΌγ³εΊγγ¦γγͺγοΏ½?γ’γγͺγ HTML γ«γ¬γ³γγΌγγΎγγ
import { renderToString } from 'react-dom/server';
const html = renderToString(<App />);γ―γ©γ€γ’γ³γε΄γ§γ―γγοΏ½?γγγ«γ΅γΌγηζγγγ HTML γζδ½ε―θ½γ«γγγγγ« hydrateRoot γη¨γγΎγγ
εΌζ°
reactNode: HTML γ«γ¬γ³γγΌγγγ React γγΌγγδΎγγ°γ<App />οΏ½?γγγͺ JSX γγΌγγ
θΏγε€
HTML ζεεγ
注ζηΉ
-
renderToStringοΏ½?γ΅γΉγγ³γΉγ«ε―Ύγγγ΅γγΌγγ―ιοΏ½?οΏ½ηγ§γγγ³γ³γγΌγγ³γγγ΅γΉγγ³γγγγ¨γrenderToStringγ―γοΏ½?γγ©γΌγ«γγγ―γ HTML γ¨γγ¦η΄γ‘γ«ιδΏ‘γγΎγγ -
renderToStringγ―γγ©γ¦γΆγ§γεδ½γγΎγγγγ―γ©γ€γ’γ³γγ³γΌγγ§οΏ½?δ½Ώη¨γ―ζ¨ε₯¨γγγΎγγγ
δ½Ώη¨ζ³
React γγͺγΌγ HTML γ¨γγ¦ζεεγ«γ¬γ³γγΌγγ
renderToString γεΌγ³εΊγγ¦γγγͺγοΏ½?γ’γγͺγγγ΅γΌγγγοΏ½?γ¬γΉγγ³γΉγ¨γγ¦ιδΏ‘γ§γγ HTML ζεεγ«γ¬γ³γγΌγγΎγγ
import { renderToString } from 'react-dom/server';
// The route handler syntax depends on your backend framework
app.use('/', (request, response) => {
const html = renderToString(<App />);
response.send(html);
});γγγ«γγγReact γ³γ³γγΌγγ³γοΏ½?εζοΏ½?ιγ€γ³γΏγ©γ―γγ£γγͺ HTML εΊεγηζγγγΎγγγ―γ©γ€γ’γ³γε΄γ§γ―γγ΅γΌγγΌγηζγγ HTML οΏ½?γγ€γγ¬γΌγ·γ§γ³γθ‘γζδ½ε―θ½γ«γγγγγ«γhydrateRoot γεΌγ³εΊγεΏ
θ¦γγγγΎγγ
代ζΏζοΏ½?οΏ½
γ΅γΌγδΈγ§ renderToString γγγΉγγͺγΌγ ε―ΎεΏγ‘γ½γγγΈοΏ½?η§»θ‘
renderToString γ―η΄γ‘γ«ζεεγθΏγγγγγΉγγͺγΌγγ³γ°γγγΌγΏοΏ½?εΎ
ζ©γγ΅γγΌγγγ¦γγΎγγγ
ε―θ½γͺε ΄εγε ¨ζ©θ½γεγγδ»₯δΈοΏ½?代ζΏζοΏ½?οΏ½οΏ½?δ½Ώη¨γζ¨ε₯¨γγΎγγ
- Node.js γδ½Ώη¨γγ¦γγε ΄εγ―γ
renderToPipeableStreamγδ½Ώη¨γγΎγγ - Deno γγWeb Stream γγ΅γγΌγγγγ’γγ³γͺγ¨γγΈγ©γ³γΏγ€γ γδ½Ώη¨γγ¦γγε ΄εγ―γ
renderToReadableStreamγδ½Ώη¨γγΎγγ
γ΅γΌγη°ε’γγΉγγͺγΌγ γγ΅γγΌγγγ¦γγͺγε ΄εγ―γrenderToString οΏ½?δ½Ώη¨γηΆγγ¦γζ§γγΎγγγ
γ―γ©γ€γ’γ³γγ³γΌγγγ renderToString γει€γγ
ζγ«γrenderToString γ―γ―γ©γ€γ’γ³γδΈγ§δ½γγοΏ½?γ³γ³γγΌγγ³γγ HTML γ«ε€ζγγγγγ«δ½Ώη¨γγγγγ¨γγγγΎγγ
// π© Unnecessary: using renderToString on the client
import { renderToString } from 'react-dom/server';
const html = renderToString(<MyIcon />);
console.log(html); // For example, "<svg>...</svg>"γ―γ©γ€γ’γ³γδΈγ§ react-dom/server γγ€γ³γγΌγγγγγ¨γ―γδΈεΏ
θ¦γ«γγ³γγ«γ΅γ€γΊγε’ε γγγγιΏγγγΉγγ§γγγγ©γ¦γΆγ§δ½γγοΏ½?γ³γ³γγΌγγ³γγ HTML γ«γ¬γ³γγΌγγεΏ
θ¦γγγε ΄εγ―γcreateRoot γδ½Ώη¨γγDOM γγ HTML γθͺγΏεγγΎγοΌ
import { createRoot } from 'react-dom/client';
import { flushSync } from 'react-dom';
const div = document.createElement('div');
const root = createRoot(div);
flushSync(() => {
root.render(<MyIcon />);
});
console.log(div.innerHTML); // For example, "<svg>...</svg>"flushSync οΏ½?εΌγ³εΊγγ―γinnerHTML γγγγγ£γθͺγΏεγεγ« DOM γζ΄ζ°γγγγγγ«γγγγγ«εΏ
θ¦γ§γγ
γγ©γγ«γ·γ₯γΌγγ£γ³γ°
γ³γ³γγΌγγ³γγγ΅γΉγγ³γγγγ¨ HTML γ«εΈΈγ«γγ©γΌγ«γγγ―γε«γΎγγ
renderToString γ―γ΅γΉγγ³γΉγοΏ½?οΏ½ε
¨γ«γ―γ΅γγΌγγγ¦γγΎγγγ
δ½γγοΏ½?γ³γ³γγΌγγ³γγοΌlazy γ§οΏ½?οΏ½ηΎ©γγγ¦γγγγγΌγΏγγγ§γγγγ¦γγγͺγ©οΏ½?ηη±γ§οΌγ΅γΉγγ³γγγε ΄εγrenderToString γ―γοΏ½?γ³γ³γγ³γγγγΌγγγγοΏ½?γεΎ
γ‘γΎγγγ代γγγ«γrenderToString γ―γοΏ½?δΈγ«γγζγθΏγ <Suspense> γγ¦γ³γγͺγθ¦γ€γγγοΏ½? fallback γ HTML γ«γ¬γ³γγΌγγΎγγγ³γ³γγ³γγ―γγ―γ©γ€γ’γ³γγ§γ³γΌγγγγΌγγγγγΎγ§θ‘¨η€ΊγγγΎγγγ
γγγθ§£ζ±Ίγγγ«γ―γγΉγγͺγΌγγ³γ°ε―ΎεΏοΏ½?ζ¨ε₯¨γ½γͺγ₯γΌγ·γ§γ³οΏ½?γγγγγδ½Ώη¨γγΎγγγγγγ―γγ΅γΌγδΈγ§γ³γ³γγ³γγγγΌγγγγγ«γ€γγ¦εε²γγ¦γ³γ³γγ³γγγΉγγͺγΌγ γγγγγγ―γ©γ€γ’γ³γγ³γΌγγγγΌγγγγεγ«γγ¦γΌγΆγ―γγΌγΈγεΎγ γ«εγΎγ£γ¦γγγ¨γγγθ¦γγγ¨γγ§γγΎγγ