ReactDOMServer
آبجکت ReactDOMServer
این امکان را فراهم میکند تا کامپوننت های خود را به حالت استاتیک رندر کنید. این معمولا در سرور Node استفاده میشود.
// ES modules
import ReactDOMServer from 'react-dom/server';
// CommonJS
var ReactDOMServer = require('react-dom/server');
مرور کلی
متدهای زیر هم در محیط مرورگر و هم سرور قابل استفاده هستند:
این متدهای دیگر، وابسته به یک پکیج (stream
) هستند که فقط در سرور در دسترس است و در مرورگر کار نخواهد کرد.
مرجع
renderToString()
ReactDOMServer.renderToString(element)
یک المنت ریاکت را به شکل HTML اولیه اش، رندر کنید. ریاکت یک استرینگ HTML به شما باز خواهد گرداند. با این متد، شما HTML را در سرور ساخته و آن را با درخواست اولیه کاربر، برایش خواهید فرستاد. این باعث خواهد شد که صفحه شما سریعتر نمایش داده شود و موتورهای جستجو هم خواهند توانست برای SEO صفحات شما را واکاوی کنند.
اگر ReactDOM.hydrate()
را روی نودی که پیشتر در سرور ساخته شده است، فراخوانی کنید، ریاکت آن را همانطوری که بوده حفظ خواهد کرد. در عین حال اجازه خواهد داد تا event handler ها را به آن الصاق کنید. از همین رو، بارگذاری اولیه سریع تر انجام خواهد شد.
renderToStaticMarkup()
ReactDOMServer.renderToStaticMarkup(element)
این مشابه renderToString
است. با این تفاوت که DOM attribute های اضافه (از قبیل data-reactroot
) که ریاکت به طور داخلی استفاده میکند را نخواهد ساخت. این زمانی مفید است که قصد داشته باشید از ریاکت صرفا برای تولید صفحات استاتیک استفاده کنید. از طرف دیگر، حذف کردن attribute های اضافه، میتواند حجم بایت های شما را کاهش دهد.
اگر قصدتان این است که از ریاکت در سمت کاربر استفاده کنید تا HTML شما تعاملی شود، از این متد استفاده نکنید. بجایش، در سرور از renderToString
و در سمت کاربر از ReactDOM.hydrate()
استفاده کنید.
renderToNodeStream()
ReactDOMServer.renderToNodeStream(element)
یک المنت ریاکت را به شکل HTML اولیه اش، رندر کنید. ریاکت یک Readable stream را به شما باز خواهد گرداند که یک استرینگ HTML را تولید میکند. HTML ساخته شده با این متد دقیقا همانی خواهد بود که ReactDOMServer.renderToString
میتوانست به شما بدهد. با این متد، شما HTML را در سرور ساخته و آن را با درخواست اولیه کاربر، برایش خواهید فرستاد. این باعث خواهد شد که صفحه شما سریعتر نمایش داده شود و موتورهای جستجو هم خواهند توانست برای SEO صفحات شما را واکاوی کنند.
اگر ReactDOM.hydrate()
را روی نودی که پیشتر در سرور ساخته شده است، فراخوانی کنید، ریاکت آن را همانطوری که بوده حفظ خواهد کرد. در عین حال اجازه خواهد داد تا event handler ها را به آن الصاق کنید. از همین رو، بارگذاری اولیه سریع تر انجام خواهد شد.
توجه:
منحصرا برای سرور! این API در مرورگر کار نخواهد کرد.
استریم باز گردانده شده از این متد، با اینگدینگ utf-8 خواهد بود. اگر به اینکدینگ متفاوتی در استریم خود نیاز دارید، به پروژه هایی مانند iconv-lite سر بزنید که استریمی از نوع transform را برای تغییر اینکدینگ متن در اختیار شما قرار میدهد.
renderToStaticNodeStream()
ReactDOMServer.renderToStaticNodeStream(element)
این مشابه renderToNodeStream
است. با این تفاوت که DOM attribute های اضافه (از قبیل data-reactroot
) که ریاکت به طور داخلی استفاده میکند را نخواهد ساخت. این زمانی مفید است که قصد داشته باشید از ریاکت صرفا برای تولید صفحات استاتیک استفاده کنید. از طرف دیگر، حذف کردن attribute های اضافه، میتواند حجم بایت های شما را کاهش دهد.
HTML ساخته شده توسط این استریم دقیقا همانی است که ReactDOMServer.renderToStaticMarkup
میتوانست برای شما بسازد.
اگر قصدتان این است که از ریاکت در سمت کاربر استفاده کنید تا HTML شما تعاملی شود، از این متد استفاده نکنید. بجایش، در سرور از renderToNodeStream
و در سمت کاربر از ReactDOM.hydrate()
استفاده کنید.
توجه:
منحصرا برای سرور! این API در مرورگر کار نخواهد کرد.
استریم باز گردانده شده از این متد، با اینگدینگ utf-8 خواهد بود. اگر به اینکدینگ متفاوتی در استریم خود نیاز دارید، به پروژه هایی مانند iconv-lite سر بزنید که استریمی از نوع transform را برای تغییر اینکدینگ متن در اختیار شما قرار میدهد.