JSS Vue.jsサンプルアプリでプレースホルダーを扱う方法
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
プレースホルダーは 、JSSで構築されたあらゆるアプリケーションにおいて重要な要素です。
!注Sitecoreレイアウト、プレースホルダー、レンダリングの仕組みやそれらを活用する方法については、「 Sitecoreデータを使うJSSアプリのページ構成 」を参照してください。また、それらを活用する方法JSS。
このトピックでは、JSSでVue.jsアプリケーションを開発する際に使えるプレースホルダーの手法について説明します。
基本的なプレースホルダー技術
プレースホルダーを追加する最も基本的かつ一般的な方法は、Placeholderコンポーネントを使うことです:
nameは公開するプレースホルダーのキーであり、renderingは現在提供されているSitecoreルート/レイアウトデータ、または他のコンポーネント内でプレースホルダーを公開する場合は親コンポーネントデータです。
Placeholderコンポーネントは子コンポーネントの周りにラッパーをレンダリングしません。これはVueのフラグメント技術によるものです。
SitecoreJssPlaceholderPlugin technique
この技術により、Vueコンポーネントの配列をプレースホルダー で、計算されたプロパティとしてコンポーネントインスタンスに付与してプレースホルダーを公開できます。
この技術により、従来のSitecore開発ではほぼ不可能だった非常に強力な操作技術が可能になります。
この技術を使うには、sitecore-jss-vueパッケージに付属しているSitecoreJssPlaceholderPluginVueプラグインをインストールする必要があります。以下のように。
import { createApp, createSSRApp } from 'vue'; import { SitecoreJssPlaceholderPlugin } from '@sitecore-jss/sitecore-jss-vue'; import componentFactory from './path/to/your/componentFactory.js';
const app = isSSR ? createSSRApp(vueOptions) : createApp(vueOptions);
// The plugin uses a "global" componentFactory, but you can override // the `componentFactory` at the component level if needed. app.use(SitecoreJssPlaceholderPlugin, { componentFactory });
コンポーネントでプラグインを使うには、コンポーネントにwithPlaceholderプロパティを追加してください:
前述の例では、SitecoreJssPlaceholderPluginプラグインはbeforeCreateフックに取り付けるmixinを使ってコンポーネント定義上のwithPlaceholderプロパティを探します。プラグインはwithPlaceholderプロパティが提供する値を使い、renderingプロパティデータ内のtabsなど指定されたプレースホルダーデータを見つけます。プラグインはそのコンポーネントに対して計算されたプロパティを作成し、プレースホルダーの名前をデフォルトでプロパティ名として使い、そのプレースホルダーのすべてのVueコンポーネントの配列を計算されたプロパティに割り当てます。これにより、Vue.jsの動的コンポーネント機能を使ってテンプレート内のプレースホルダーコンポーネントをレンダリングできます。
テンプレート内のコンポーネント配列を反復すると、Vueは出力した場所でコンポーネントをレンダリングします。またはPlaceholderコンポーネントを使ってこれを実現できます。この方法でプレースホルダーの内容を発行すると、そのプレースホルダーの内容にはラップコンポーネントがなく、インラインでレンダリングされます。これは特定のコンポーネント階層に基づくVueライブラリ(例えばvue-carousel)を使う場合に非常に役立ちます。例えば、以下のコードサンプルを考えてみてください:
前のサンプルでは、コンポーネント階層がcarousel -> slideであることが期待されます。 slideコンポーネントをプレースホルダーで追加したい場合は、Sitecoreが定義できるようにPlaceholderコンポーネントsc-placeholderを使って同じ階層を達成できます。
コンポーネント変換
前述のCarousel->Slideのように完全にフラットなコンポーネント階層を望む場合は、計算された配列特性を利用して、インラインテンプレートを使って子コンポーネントをラッパーで変換できます。この手法を使うと、子Sitecoreコンポーネントはラッピングを完全に認識せず、関心事の分離のために自分のコンテンツのみをレンダリングできます。
スロットAPI
SitecoreJssPlaceholderPluginプラグインが提供する動的計算プロパティではなくスロットパターンを好みたい場合は、JSSプレースホルダーにはデフォルトのスロットスコープがあります。
以下の例は、デフォルトのスコープスロットを使ってコンポーネント配列をレンダリングする方法を示しています。
直接的なプレースホルダー内省
プレースホルダーのレンダリングを完全にコントロールしたいなら、そのプレースホルダーの構成要素ではなくその データにアクセスし、$props.renderingを使って子コンポーネントのデータやフィールドを巡査できます。なぜなら、プレースホルダーの階層はJavaScriptオブジェクトだからです。このデータは好きなようにレンダリングできます。
良いユースケースとしては、タブのパーツを複数の場所(タブタイトルやタブの内容)にレンダリングしたいコンポーネントなどがあります。例えば:
## 複数のプレースホルダー前述の技術を使えば、コンポーネント内に複数のプレースホルダーをレンダリングできます。例えば:
-
基本的なテクニックを使う:
-
SitecoreJssPlaceholderPluginの使い方:
プレースホルダーの強化
プレースホルダーコンポーネントは、体験を向上させる多くのカスタマイズをサポートします。
誤差成分
プレースホルダーでレンダリングエラー(例外)が発生した場合、プレースホルダーの内容ではなくエラーコンポーネントが表示され、エラーの詳細をコンソールにログします。このコンポーネントは、errorComponentプロパティを使ってVueコンポーネントを置き換えることでカスタマイズできます。
欠損した部品の対処
もしプレースホルダーにcomponentFactoryが知らないレンダリング名が含まれている場合(例えば、バックエンド開発者がFooレンダリングを作成しページに追加するが、まだFoo.jsファイルがない場合)、レンダリングはVueコンポーネントのmissingComponentComponentプロパティで定義されたMissingComponentコンポーネントに置き換えられます。デフォルトの実装はシンプルなメッセージですが、missingComponentComponentプロパティで自分のVueコンポーネントを使ってカスタマイズできます。