命令としての Apex メソッドのコール

メソッド呼び出しのタイミング (ボタンのクリックに対応するなど) を制御するには、命令としてメソッドをコールします。命令としてメソッドをコールすると、1 つの応答のみを受け取ります。フレームワークに制御を委任し、値のストリームがプロビジョニングされる @wire と、この動作を比較します。

次のシナリオでは、@wire を使用せずに命令としてメソッドを Apex コールする必要があります。

  • データを挿入、更新、削除するメソッドが含まれる、cacheable=true が付加されていないメソッドをコールする。
  • 呼び出しのタイミングを制御する。
  • ユーザインターフェース API でサポートされていないオブジェクト (ToDo や行動など) を操作する。
  • LightningElement を拡張しない ES6 モジュールのメソッドをコールする。

Apex メソッドが @AuraEnabled(cacheable=true) でマークされている場合、ネットワークコールを発行してサーバの Apex メソッドを呼び出す前にクライアント側の Lightning データサービスキャッシュがチェックされます。ただし、Apex によってプロビジョニングされるデータは Lightning データサービスでは管理されません。したがって、古いデータを更新するには、Apex メソッドを呼び出してから notifyRecordUpdateAvailable(recordIds) をコールし、Lightning データサービスキャッシュを更新します。

前の例と同じ getContactList クラスを使用する、lwc-recipes リポジトリのサンプルコンポーネントを見てみましょう。このクラスを結び付けるのではなく、ユーザがボタンをクリックしたときにコンポーネントで getContactList() をコールします。

[Load Contacts (取引先責任者を読み込む)] ボタンと、その下に表示された取引先責任者のリスト。

インポートされた関数は Promise を返します。このコードは一連のパラメータを前提として 1 回限りの解決策を提供しますが、@wire(apexMethod) は値のストリームを提供し、動的パラメータをサポートします。

このテンプレートは lwc:if を使用して、取引先責任者のリストまたはエラーパネルを表示します。また、for:each を使用して、取引先責任者を反復処理します。

Apex メソッドにパラメータ値を渡すには、Apex メソッドのパラメータと一致するプロパティを持つオブジェクト内でパラメータ値を渡します。たとえば、Apex メソッドが文字列パラメータを取る場合、文字列を直接渡さず、値が文字列であるプロパティを含むオブジェクトを渡します。

検索項目に文字を入力し、[検索] をクリックすると、取引先責任者のリストが返されます。

lwc-recipes リポジトリには、パラメータを使用してメソッドをコールする apexImperativeMethodWithParams コンポーネントもあります。オブジェクトパラメータを使用してメソッドをコールするには、apexImperativeMethodWithComplexParams コンポーネントを参照してください。

レコードデータなどの値を LWC から Apex に渡すときは、JavaScript オブジェクトまたは配列を使用します。Apex メソッドに渡されるときに、対応付けの値はシリアライズされません。

命令 Apex コールおよび結び付けられた Apex コールでは、対応付けの使用はサポートされていません。map[key] = val などで対応付けを不適切に使用すれば、LWS を無効にしてデータを渡すことができました。しかし、LWS が有効のときは、このような方法は使用できなくなりました。また、Apex に値を渡す場合、map.set(key, val) はサポートされません。

JavaScript オブジェクトを次のように使用することができます。

関連トピック