アプリケーションを構築する方法は2つありますか、それとも一緒に使用できますか?
併用できます。
それを一緒に使用できる場合、その方法-サーバー側とクライアント側で同じ要素を複製する必要がありますか?または、サーバーでアプリケーションの静的な部分を構築し、クライアント側で動的な部分を構築できます。事前にレンダリングされたサーバー側への接続はありませんか?
同じレイアウトをレンダリングして、リフローと再描画の操作を回避し、ちらつきや点滅を少なくすると、ページがスムーズになります。ただし、これは制限ではありません。SSR html(何か電極が応答時間を短縮するために行う処理)を、CSR(クライアント側のレンダリング)によって上書きされる静的htmlを送信することもできます。
SSRから始めたばかりの場合は、シンプルに開始することをお勧めします。SSRは非常に複雑になりがちです。サーバー上でhtmlをビルドすると、ウィンドウ、ドキュメント(これらはクライアント上にあります)などのオブジェクトへのアクセスが失われ、非同期操作(そのまま)を組み込むことができなくなり、一般にコードSSR互換性を得るための多くのコード編集が失われます( bundle.jsをパックするには、webpackを使用する必要があるためです。CSSインポート、要求vsインポートのようなものは突然あなたを噛み始めます(これはwebpackのないデフォルトのReactアプリの場合ではありません)。
SSRの一般的なパターンは次のようになります。リクエストを処理するExpressサーバー:
const app = Express();
const port = 8092;
// This is fired every time the server side receives a request
app.use(handleRender);
function handleRender(req, res) {
const fullUrl = req.protocol + '://' + req.get('host') + req.originalUrl;
console.log('fullUrl: ', fullUrl);
console.log('req.url: ', req.url);
// Create a new Redux store instance
const store = createStore(reducerFn);
const urlToRender = req.url;
// Render the component to a string
const html = renderToString(
<Provider store={store}>
<StaticRouter location={urlToRender} context={{}}>
{routes}
</StaticRouter>
</Provider>
);
const helmet = Helmet.renderStatic();
// Grab the initial state from our Redux store
const preloadedState = store.getState();
// Send the rendered page back to the client
res.send(renderFullPage(helmet, html, preloadedState));
}
SSRで始めている人への私の提案は、静的なHTMLを提供することです。CSR SPAアプリを実行することで静的HTMLを取得できます。
document.getElementById('root').innerHTML
SSRを使用する唯一の理由は次のとおりです。
- SEO
- 読み込みが速い(これを割り引く)
ハック:https : //medium.com/@gagan_goku/react-and-server-side-rendering-ssr-444d8c48abfc