メッセージチャネルの登録および登録解除

メッセージチャネルでメッセージの登録および登録解除を行うには、メッセージチャネルを @salesforce/messageChannel で範囲設定されたモジュールから Lightning Web コンポーネントにインポートします。Lightning Message Service の subscribe() 関数と unsubscribe() 関数をコールします。

github.com/trailheadapps/lwc-recipes リポジトリの lmsSubscriberWebComponent では、メッセージチャネルへの登録、およびチャネルからの登録解除の方法が示されます。この例では、「メッセージチャネルでの公開」のパブリッシャーコンポーネントを使用します。

パブリッシャーコンポーネントから取引先責任者を選択すると、選択したレコード ID が Record_Selected__c メッセージチャネルに公開されます。

登録者コンポーネントの HTML は、公開されたメッセージに反応し、メッセージペイロードを介してレコード ID が提供された取引先責任者のデータを表示します。

コンポーネントの JavaScript で、lightning/messageService から登録に必要な Message Service の機能をインポートします。@salesforce/messageChannel から Record_Selected__c メッセージチャネルをインポートします。

@wire(MessageContext) を使用してコンテキストオブジェクトを作成します。このオブジェクトは、Lightning Message Service を使用している Lightning Web コンポーネントに関する情報を提供します。コンポーネントを DOM に添付してからでないと、@wire(MessageContext) でデコレートされたプロパティを使用できません。

subscribeToMessageChannel() 関数は、subscription が null かどうかを確認します。subscription が null の場合、Lightning Message Service の subscribe() メソッドをコールして subscription に割り当てます。subscribe() メソッドは、メッセージコンテキスト、メッセージチャネルの名前、公開されたメッセージを処理するリスナーメソッドの 3 つの必須パラメータを取ります。リスナーメソッドが呼び出されると、メッセージを handleMessage() に渡します。handleMessage() は、受信した JSON メッセージペイロードから recordId プロパティを抽出します。次に、レコード ID と一致する取引先責任者の関連情報で HTML テンプレートが更新されます。

メッセージチャネル上のメッセージをアプリケーション内の任意の場所から受信するには、subscribe() メソッドの 4 番目のパラメータ (省略可能) として { scope: APPLICATION_SCOPE } を渡します。「Message Service の範囲の定義」を参照してください。

Lightning Message Service からのメッセージの受信を停止するには、登録参照を渡して unsubscribe() をコールします。subscription オブジェクトには、解除する登録への参照が含まれます。次の例では、unsubscribeToMessageChannel() をコールします。これにより、unsubscribe() がコールされて、subscription が null に設定されます。

LightningElement でないサービスコンポーネントを作成する場合、@wire(MessageContext) を使用して MessageContext オブジェクトを作成することはできません。代わりに、createMessageContext() メソッドと releaseMessageContext() メソッドを lightning/messageService からインポートします。createMessageContext() を使用してコンテキストオブジェクトを作成し、それを messageContext などの項目に割り当てます。次に、messageContextsubscribe() メソッドに渡します。コンテキストはサービスコンポーネントに対して自動的に開放されません。releaseMessageContext(messageContext) をコールして、コンポーネントのメッセージコンテキストに関連付けられた登録を削除します。

関連トピック