ReactはクライアントサイドのJavaScriptライブラリとして非常に人気がありますが、サーバーサイドでのレンダリングも可能です。サーバーサイドレンダリングによって、初回読み込み時の表示速度を改善することができます。本記事では、Reactでのサーバーサイドレンダリングの基礎について解説します。

サーバーサイドレンダリングとは

サーバーサイドレンダリングとは、サーバー上でコンポーネントをレンダリングし、HTMLを生成することです。クライアントサイドレンダリングでは、コンポーネントをブラウザ上でレンダリングするため、JavaScriptの処理が必要となります。初回読み込み時には、JavaScriptのダウンロード・実行が必要となるため、表示速度が遅くなることがあります。一方、サーバーサイドレンダリングでは、HTMLを生成するため、JavaScriptの処理が不要となります。そのため、初回読み込み時の表示速度を改善することができます。

サーバーサイドレンダリングの実装方法

Reactでのサーバーサイドレンダリングは、Node.js上で実行することができます。以下は、Reactでのサーバーサイドレンダリングの基本的な実装方法です。

  1. react-dom/serverモジュールのrenderToString()関数を使って、コンポーネントを文字列に変換します。
import ReactDOMServer from 'react-dom/server';
import App from './App';

const html = ReactDOMServer.renderToString(<App />);
  1. 変換された文字列を、HTMLのテンプレートに埋め込んでレスポンスを返します。
import express from 'express';
import ReactDOMServer from 'react-dom/server';
import App from './App';

const app = express();

app.get('/', (req, res) => {
  const html = ReactDOMServer.renderToString(<App />);
  res.send(`
    <!DOCTYPE html>
    <html>
      <head>
        <title>Reactサーバーサイドレンダリング</title>
      </head>
      <body>
        <div id="root">${html}</div>
        <script src="client.js"></script>
      </body>
    </html>
  `);
});

app.listen(3000, () => {
  console.log('Server is running on port 3000');
});

このようにして、サーバーサイドレンダリングを実装する
ことができます。ただし、注意点がいくつかあります。

  1. コンポーネントのstateやイベントハンドラは、サーバーサイドレンダリングでは動作しません。クライアントサイドでJavaScriptが実行された後に、初めて動作するようになります。
  2. クライアントサイドでのJavaScriptの実行によって、サーバーサイドで生成されたHTMLが書き換えられる可能性があります。そのため、サーバーサイドレンダリングを実装する場合は、クライアントサイドのJavaScriptのコードにも注意が必要です。

まとめ

Reactでのサーバーサイドレンダリングは、初回読み込み時の表示速度を改善するために有用です。react-dom/serverモジュールのrenderToString()関数を使って、コンポーネントを文字列に変換し、HTMLのテンプレートに埋め込んでレスポンスを返すことができます。ただし、クライアントサイドでのJavaScriptの実行によって、サーバーサイドで生成されたHTMLが書き換えられる可能性があるため、注意が必要です。

投稿者 admin

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です