Reactコンポーネント内でSitecoreコンテキストデータにアクセスする方法

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

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

JSSはReactの高次コンポーネント(HOC)を搭載しており、Sitecoreのコンテキスト、つまりコンポーネントレベルではなくルートレベルのデータを任意のコンポーネントに注入できます。

コンテキストデータが必要な一般的な例としては、ルートレベルに保存されたページタイトルやメタキーワードフィールドにアクセスするため、または高度なSitecoreエディターでアプリを使用する際の条件付きレンダリング変更などがあります。以下はHOCの使用例の簡略例です。

import { withSitecoreContext } from '@sitecore-jss/sitecore-jss-react';

const MyComponent = (props) =>

Page editing: {props.sitecoreContext.pageEditing}
;

// wrap MyComponent in the HOC (note the double function invocation - important) export default withSitecoreContext()(MyComponent);

withSitecoreContext() HOCを使用するには、それを使用するコンポーネントをコンテキスト状態を維持するSitecoreContextコンポーネントでラップする必要があります。例えば、アプリケーションのルートコンポーネントでは:

import React from 'react'; import { SitecoreContext } from '@sitecore-jss/sitecore-jss-react'; import { componentFactory } from './temp/componentBuilder';

export default class extends React.Component { constructor(props) { super(props);

// Set default sitecoreContext if (props.ssrState) { this.sitecoreContext = props.ssrState.sitecore && props.ssrState.sitecore.route ? { route: props.ssrState.sitecore.route, itemId: props.ssrState.sitecore.route.itemId, ...props.ssrState.sitecore.context, } : props.ssrState.sitecore.context } else { this.sitecoreContext = null; } }

render() { return ( ) } }

withSitecoreContext()HOCを使う最後のポイントは、Sitecoreコンテキストが変わったときに、props.sitecoreContextプロパティ内のデータが更新されるようにすることです。ネストされたコンポーネント内でprops.updateSitecoreContextにアクセスし、props.sitecoreContextを更新するには、コンポーネントをwithSitecoreContext({ updatable: true })でラップできます。これは、アプリ内でルートが変更された時や、サーバー側のレンダリングが状態オブジェクトを渡す場合、つまり新しいレイアウトデータがSitecoreから取り出されてレンダリングされるときに使われることです。例えば:

import React from 'react'; import { withSitecoreContext } from '@sitecore-jss/sitecore-jss-react';

class RouteHandler extends React.Component { getContext = () => this.props.sitecoreContext

async updateRouteData() { const routeData = await getRouteData("/"); // makes a request for new route data, for example

this.props.updateSitecoreContext(routeData.sitecore.context); } }

export default withSitecoreContext({ updatable: true })(RouteHandler)

!注グローバル変数をssrInitialState保存してアプリケーション全体で使用することは推奨しません。代わりに、ssrInitialStateをAppRootに渡し、必要なすべてのデータをSitecoreContext内に保存し、withSitecoreContext()を使ってアクセスする必要があります。

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