JSS Reactアプリにおけるルーティングおよび状態管理

Version:
日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

サンプルアプリは レイアウトサービス (または切断モードのローカル ルートデータファイル )に基づく動的ルーティングを使用し、ルートやナビゲーションの変更によってアプリの状態変更をトリガーします。主要な実行フローの追跡はルート設定から始めなければなりません。

クライアント側ルーティング

src/index.jsファイルのアプリの主要なクライアント側エントリーポイントから、以下はクライアント側ルーティングの流れを説明します。

  • ファイル src/index.js ではSSRのデータと状態が収集され、 コンポーネントに渡されます。
  • ファイル src/AppRoot.js では、ルーターがアプリのルートに応答し、それを に渡すように設定されています。
  • ファイル src/RouteHandler.jsでは、現在のルートのレイアウトサービスデータを取得し、アプリのルートおよび言語状態が維持されます。ルートデータは コンポーネントに渡されます。
  • Layout.jsでは、JSSアプリのシェルHTMLおよびグローバル要素、そしてそのルート(s)がレンダリングされます。
  • ルートの残りの構造はルートデータによって定義され、各プレースホルダーにどのコンポーネントとそのコンテンツデータが存在するかを定義します。

サーバーサイドルーティング

ReactアプリがNodeサーバーによってプリレンダリングされると、最初の応答でクライアントにHTMLを返します。つまり、ルートデータフローはクライアント側のルーティングに似ていますが、いくつかの重要な違いがあります。

以下は、サーバー側のルートデータフローがクライアント側のルーティングとどのように異なるかを説明します。

  • 最初のステップは適用モードによって異なります:
    • 統合モードのみでは、Sitecoreがリクエストを受け取り、サーバー側でルート解析を行い、リクエストされたアイテムがJSSアプリケーションで処理されるかどうか、そして複数のJSSアプリケーションがSitecoreに展開されている場合にどのバンドルを実行するかを決定します。
    • ヘッドレスモードのみでは、Node SSRプロキシがリクエストを受け取り、それをSitecoreレイアウトサービスに渡します。
  • ノードホストはserver/server.jsファイル内のrenderView関数を呼び出します。関数の引数にはルートデータ/レイアウトサービスの出力が含まれます。
  • renderView関数は以下の手順を実行します。
    • サーバー側レンダリング(SSR)で使用するレイアウトおよび辞書データを受け取ります。
    • ルートコンポーネント src/AppRoot.jsでは、SSRデータをメンバー sitecoreContextのアプリの初期状態に保存します。この初期状態はアプリケーションをラップする SitecoreContext コンポーネントに提供されます。
    • ReactのSSR機能を使ってアプリをHTMLにレンダリングします。
    • レンダリングされたアプリを index.html テンプレート内に埋め込み、メタデータとSSR状態を設定します。SSR状態(window.__JSS_STATE__)はクライアント上でアプリの状態を再調整するために使用され、初期ルートデータをLayout Serviceに呼び出す必要を省きます。
    • 最終的なHTMLでレンダリングコールバック関数を呼び出します。

!注GraphQLを使用する場合、サンプルアプリはデフォルトでApollo GraphQLツールを使ってrenderToStringWithData() サーバー上でアプリをHTMLにレンダリングします。これにより、GraphQLクエリの非同期結果を評価したサーバー側レンダリングが可能になります。GraphQLを使っていない場合は、ReactDOMServer.renderToString() メソッドを使うことができます。

この記事を改善するための提案がある場合は、 お知らせください!