メッセージチャネルでの公開

Lightning Web コンポーネントからメッセージチャネルでメッセージを公開するには、範囲設定されたモジュール @salesforce/messageChannel をコンポーネントの JavaScript ファイルに含め、Lightning Message Service の publish() 関数をコールします。

Lightning Message Service は、コンポーネントライフサイクルの破棄フェーズになるまで、登録しているコンポーネントにメッセージを公開します。Lightning ページから移動すると、コンポーネントがキャッシュされ、破棄されないことがあります。Lightning Message Service がアプリケーション全体に範囲設定されている場合でも、これらのコンポーネントは Lightning Message Service からのメッセージを公開および受信します。

github.com/trailheadapps/lwc-recipes リポジトリの lmsPublisherWebComponent は、Lightning ページで登録者に通知するメッセージを公開します。Lightning Message Service により、ページの Visualforce、Aura、Lightning Web コンポーネントの間でそのメッセージの通信が行われます。

LWC、Aura、Visualforce のパブリッシャーコンポーネント

コンポーネントの HTML テンプレートファイルには、取引先責任者のリストが表示されます。取引先責任者が選択されると、handleContactSelect ハンドラが呼び出され、メッセージがメッセージチャネルに公開されます。

コンポーネントの JavaScript ファイルで、メッセージチャネルと、メッセージチャネルを操作するために必要な Lightning Message Service 関数をインポートします。

@wire(MessageContext) を使用して MessageContext オブジェクトを作成します。このオブジェクトは、Lightning Message Service を使用している Lightning Web コンポーネントに関する情報を提供します。@wire(MessageContext) アダプタを使用する場合、コンポーネントのライフサイクルイベントを操作する必要はありません。コンポーネントが破壊されると、Lightning Message Service 機能によって自動的に登録が解除されます。

handleContactSelect() メソッドは、公開するメッセージコンテンツを作成します。Lightning Message Service の publish() 関数は、メッセージコンテキスト、メッセージチャネルの名前、メッセージペイロードの 3 つのパラメータを取ります。ここでは、メッセージペイロードは JSON オブジェクト (recordId キーの値は event.target.contact.Id) です。

コンポーネントを DOM に添付してからでないと、@wire(MessageContext) でデコレートされたプロパティを使用できません。constructor() 関数では @wire(MessageContext) を使用できません。

関連トピック