命令としての 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()
をコールします。
インポートされた関数は 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 オブジェクトを次のように使用することができます。
関連トピック