renderToString
renderToString ஒரு React tree-ஐ HTML string ஆக render செய்கிறது.
const html = renderToString(reactNode, options?)குறிப்பு
renderToString(reactNode, options?)
Server-இல், உங்கள் app-ஐ HTML ஆக render செய்ய renderToString-ஐ call செய்யுங்கள்.
import { renderToString } from 'react-dom/server';
const html = renderToString(<App />);Client-இல், server-generated HTML-ஐ interactive ஆக்க hydrateRoot-ஐ call செய்யுங்கள்.
மேலும் உதாரணங்களை கீழே பார்க்கவும்.
Parameters
-
reactNode: HTML ஆக render செய்ய வேண்டிய React node. உதாரணமாக<App />போன்ற JSX node. -
optional
options: Server render-க்கான object.- optional
identifierPrefix:useIdஉருவாக்கும் IDs-க்கு React பயன்படுத்தும் string prefix. ஒரே page-இல் பல roots பயன்படுத்தும்போது conflicts-ஐத் தவிர்க்க பயனுள்ளது.hydrateRoot-க்கு pass செய்யப்பட்ட அதே prefix ஆக இருக்க வேண்டும்.
- optional
Returns
ஒரு HTML string.
Caveats
-
renderToString-க்கு வரையறுக்கப்பட்ட Suspense support மட்டுமே உள்ளது. ஒரு component suspend ஆனால்,renderToStringஉடனே அதன் fallback-ஐ HTML ஆக அனுப்பும். -
renderToStringbrowser-இல் வேலை செய்யும்; ஆனால் client code-இல் அதை பயன்படுத்துவது பரிந்துரைக்கப்படவில்லை.
பயன்பாடு
React tree-ஐ HTML string ஆக render செய்தல்
உங்கள் server response உடன் அனுப்பக்கூடிய HTML string ஆக app-ஐ render செய்ய renderToString-ஐ call செய்யுங்கள்:
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 components-ன் ஆரம்ப non-interactive HTML output-ஐ உருவாக்கும். Client-இல், அந்த server-generated HTML-ஐ hydrate செய்து interactive ஆக்க hydrateRoot-ஐ call செய்ய வேண்டும்.
மாற்று வழிகள்
Server-இல் renderToString-இலிருந்து streaming render-க்கு migration செய்தல்
renderToString உடனடியாக ஒரு string return செய்கிறது; ஆகவே content load ஆகும்போது அதை stream செய்வதை support செய்யாது.
சாத்தியமானபோது, இந்த முழு அம்சங்களைக் கொண்ட மாற்று வழிகளைப் பயன்படுத்த பரிந்துரைக்கிறோம்:
- நீங்கள் Node.js பயன்படுத்தினால்,
renderToPipeableStream-ஐப் பயன்படுத்துங்கள். - நீங்கள் Deno அல்லது Web Streams கொண்ட modern edge runtime பயன்படுத்தினால்,
renderToReadableStream-ஐப் பயன்படுத்துங்கள்.
உங்கள் server environment streams-ஐ support செய்யவில்லை என்றால், renderToString-ஐத் தொடர்ந்து பயன்படுத்தலாம்.
Server-இல் renderToString-இலிருந்து static prerender-க்கு migration செய்தல்
renderToString உடனடியாக ஒரு string return செய்கிறது; ஆகவே static HTML generation-க்காக data load ஆக காத்திருப்பதை support செய்யாது.
இந்த முழு அம்சங்களைக் கொண்ட மாற்று வழிகளைப் பயன்படுத்த பரிந்துரைக்கிறோம்:
- நீங்கள் Node.js பயன்படுத்தினால்,
prerenderToNodeStream-ஐப் பயன்படுத்துங்கள். - நீங்கள் Deno அல்லது Web Streams கொண்ட modern edge runtime பயன்படுத்தினால்,
prerender-ஐப் பயன்படுத்துங்கள்.
உங்கள் static site generation environment streams-ஐ support செய்யவில்லை என்றால், renderToString-ஐத் தொடர்ந்து பயன்படுத்தலாம்.
Client code-இலிருந்து renderToString-ஐ அகற்றுதல்
சில சமயங்களில், ஒரு component-ஐ HTML ஆக மாற்ற client-இல் renderToString பயன்படுத்தப்படுகிறது.
// 🚩 Unnecessary: using renderToString on the client
import { renderToString } from 'react-dom/server';
const html = renderToString(<MyIcon />);
console.log(html); // உதாரணமாக, "<svg>...</svg>"Client-இல் react-dom/server import செய்வது தேவையில்லாமல் bundle size-ஐ அதிகரிக்கும்; அதனைத் தவிர்க்க வேண்டும். Browser-இல் ஒரு component-ஐ HTML ஆக render செய்ய வேண்டுமெனில், createRoot-ஐப் பயன்படுத்தி DOM-இலிருந்து HTML-ஐ read செய்யுங்கள்:
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); // உதாரணமாக, "<svg>...</svg>"innerHTML property-ஐ read செய்வதற்கு முன் DOM update ஆகியிருப்பதை உறுதிசெய்ய flushSync call அவசியம்.
சிக்கல் தீர்வு
Component suspend ஆகும்போது HTML எப்போதும் fallback-ஐ கொண்டிருக்கும்
renderToString Suspense-ஐ முழுமையாக support செய்யாது.
ஏதாவது component suspend ஆனால் (எடுத்துக்காட்டாக, அது lazy மூலம் define செய்யப்பட்டிருப்பதால் அல்லது data fetch செய்வதால்), அதன் content resolve ஆக renderToString காத்திருக்காது. அதற்கு பதிலாக, renderToString அதற்கு மேலுள்ள அருகிலான <Suspense> boundary-ஐ கண்டறிந்து, அதன் fallback prop-ஐ HTML-இல் render செய்யும். Client code load ஆகும் வரை content தோன்றாது.
இதைக் கையாள பரிந்துரைக்கப்பட்ட streaming solutions-இல் ஒன்றைப் பயன்படுத்துங்கள். Server side rendering-க்கு, server-இல் content resolve ஆகும் போது chunks ஆக stream செய்ய முடியும்; client code load ஆகும் முன்பே page படிப்படியாக நிரம்புவதை user பார்க்கலாம். Static site generation-க்கு, static HTML உருவாக்கும் முன் எல்லா content-உம் resolve ஆகும் வரை அவை காத்திருக்க முடியும்.