GraphQLを使用してJSS Next.jsアプリでコンポーネントレベルのデータを取得する
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
Next.jsサンプルアプリは、コンポーネントレベルでのGraphQLエンドポイントのクエリを可能にする コンポーネントレベルのデータフェッチ をサポートしています。 コードファーストの開発者ワークフローに従って、GraphQLコンポーネントレベルのクエリは 接続モードでのみ実行できます。
シークレットや機密情報をコンポーネント レベルのgetStaticProps関数とgetServerSideProps関数に含めないでください。これらの関数は、クライアント側バンドルに含まれています。また、クライアントバンドルには、クライアント側のコードがインポートを使用していない場合でも、関数が依存するインポートも含まれます。
これは、ページ・レベルのgetStaticPropsおよびgetServerSideProps機能には影響しません。
このコードでは、Sitecore GraphQL Edgeエンドポイントで定義されたGraphQLタイプに強力なタイプを接続することをお勧めします。アプリケーションは、ライブラリgraphql-letとGraphQLイントロスペクション データ を使用してこれを実現します。
サンプルアプリには、スキーマを探索し、クエリをテストするためのGraphiQLインターフェイスが用意されています。デフォルトでは、インターフェイスには ${SITECORE_API_HOST}/sitecore/api/graph/edge/ui?sc_apikey=${SITECORE_API_KEY}を使用してアクセスできます。このインターフェースは、コンポーネントで使用できるGraphQLタイプを決定する場合に役立ちます。
graphql-letライブラリは、対応する .graphq.d.tsファイル内の型について同じ情報を提供します。
GraphQLでコンポーネントレベルのデータフェッチを使用するには:
-
GraphQL-ConnectedDemo.graphqlファイルで、Connected Demoクエリの例に従ってGraphQLクエリを定義します。
ライブラリgraphql-letは ファイル . GraphQL-ConnectedDemoQuery.graphql.d.tsを生成します。
-
コンポーネントファイルに、次のimportステートメントを追加します。
-
必要に応じて、イントロスペクションデータを更新して 、最新のGraphQLタイプにアクセスできるようにします。
-
GraphQLクエリをインポートします。
-
コンポーネントで、getStaticPropsまたはgetServerSideProps関数を定義します。この例では、getStaticPropsを実装します。GraphQLは切断モードでは動作しないため、アプリが切断モードで実行されている場合は、関数を終了する必要があります。また、GraphQLRequestClientクラスを使用して新しいGraphQLクライアントを作成する必要があります。例えば:
-
要求を実行し、結果を返します。
-
コンポーネント関数では、useComponentPropsフックを使用して結果データにアクセスできます。
-
編集モードでコンテンツを表示するための戦略を実装します。Sitecoreコンテキストを使用して静的データをレンダリングできます。または、編集モードでmasterデータベースデータを表示するには、Content ManagementインスタンスのエンドポイントURLを使用してGraphQLクライアントをインスタンス化します。
手記この手順を省略すると、Content Delivery URLエンドポイントはmasterデータベースではなくwebから提供されるため、編集モードではサイト訪問者と同じデータが表示されます。
-
コンポーネントでプレースホルダーマークアップをレンダリングするには:
-
データ取得に別のエンドポイントを使用するには、コンポーネントがプレビュー/編集モードになっているかどうかを確認し、それに応じてURLを切り替えます。この例では、GraphQL編集URLをEDITING_GQL_ENDPOINTという名前の環境変数に割り当てたと仮定しています。
手記sitecoreApiKeyはエンドポイントによって異なる場合があるため、エンドポイントの切り替えと同様のロジックを使用して切り替えてください。
-
コンポーネントでのGraphQLクエリの使用に関するより複雑な例については、nextjs-styleguideアドオンテンプレートで、/src/components/graphql/GraphQL-ConnectedDemo.dynamic.tsxで定義されているコンポーネントを参照してください。