searchTerm を指定してアカウントのリストを返す Apex メソッド getAccounts は、Lightning Web コンポーネントで使用できます。
getAccounts メソッドを使用する Lightning Web コンポーネント プロパティの正しい定義は何ですか?
正解: A
@wire を使用して Lightning Web コンポーネントのプロパティを Apex メソッドに接続するための正しい構文では、メソッドと、プレフィックスが $ であるリアクティブ プロパティを含む設定オブジェクトを指定する必要があります。
正しい使い方は次のとおりです。
ジャバスクリプト
コピー編集
@wire(getAccounts, { searchTerm: '$searchTerm' })
これにより、リアクティブな searchTerm プロパティが getAccounts メソッドに正しく接続されます。
参照:
プロパティをApexメソッドに接続する
getAccounts Apexメソッドを使用するLightning Web Component(LWC)プロパティの正しい定義を判断するには、LWCにおける@wireデコレータの構文と使用法を評価する必要があります。特に、Apexメソッドへの接続方法とパラメータの受け渡し方法に注目します。Salesforce公式のLightning Web Components開発者ガイドを参照しながら、問題と各オプションを体系的に分析してみましょう。
要件の理解:
Apexメソッド: getAccountsメソッドは、List<Account>を返し、パラメータsearchTermを取るApexメソッドです。LWCからApexメソッドを呼び出すには、以下のアノテーションを付与する必要があります。
@AuraEnabled(cacheable=true) (@wire の場合) かつ静的である必要があります。Lightning Web コンポーネント開発者ガイドには、「@wire を使用して Lightning Web コンポーネントから Apex メソッドを呼び出すには、メソッドが静的であり、@AuraEnabled(cacheable=true) でアノテーションされている必要があります」(Salesforce Lightning Web コンポーネント開発者ガイド、「Apex メソッドの呼び出し」) と記載されています。
LWCプロパティ:@wireを使用してgetAccountsを呼び出すLWCプロパティの正しい定義を問う問題です。@wireデコレータは、プロパティまたは関数をApexメソッドなどのデータソースに接続するために使用され、動的なパラメータを渡すことができます。
パラメータの受け渡し: searchTermパラメータはgetAccountsに動的に渡す必要があります。つまり、その値はLWC内のリアクティブプロパティ(例:searchTerm)から取得されます。LWCでは、リアクティブプロパティの変更が追跡され、@wireパラメータでは$プレフィックスを使用してリアクティブであることを示します。
LWC @wire 構文:
@wire デコレータは、プロパティまたは関数をデータソース(例:Apex メソッド)に接続します。Apex メソッドに接続する場合の構文は次のとおりです。
ジャバスクリプト
コピー
@wire(apexMethod, { パラメータ1: '$property1', パラメータ2: '$property2' })
プロパティ名;
Apex メソッドリファレンス: apexMethod は、インポートされた Apex メソッドです (例: コントローラからインポートされた getAccounts)。
パラメータ: 2番目の引数は、ApexメソッドのパラメータをLWCプロパティにマッピングするオブジェクトです。$プレフィックスはプロパティをリアクティブにし、プロパティが変更されると関連付けられたメソッドが再度呼び出されることを意味します。Lightning Webコンポーネント開発者ガイドでは、「パラメータオブジェクトで$プレフィックスを使用することで、リアクティブプロパティであることを示すことができます。これにより、プロパティの値が変更されると関連付けられたメソッドが呼び出されます」(Salesforce Lightning Webコンポーネント開発者ガイド、「Apexメソッドへのパラメータの受け渡し」)と説明されています。
結果: wired プロパティは、データ (Apex メソッドの戻り値) またはエラー (エラーが発生した場合) を含むオブジェクトを受け取ります。
オプションの評価:
A). @wire(getAccounts, { searchTerm: '$searchTerm' })
構文: @wire を使用して getAccounts を呼び出し、パラメータをオブジェクト { searchTerm: '$searchTerm' } として渡します。
パラメータマッピング:getAccounts ApexメソッドのsearchTermパラメータは、LWCのsearchTermプロパティにマッピングされます。$searchTerm構文は、searchTermがリアクティブプロパティであることを示しています。searchTermが変更されると、getAccountsが再度呼び出されます。
正確性: これは、パラメータを持つApexメソッドを記述するための標準LWC構文と一致しています。Lightning Webコンポーネント開発者ガイドでは、「リアクティブプロパティには$プレフィックスを使用して、ApexメソッドにパラメータをJavaScriptオブジェクトとして渡します」(Salesforce Lightning Webコンポーネント開発者ガイド、「Apexメソッドの呼び出し」)と明記されています。
結論: 適切な @wire 構文とパラメータ形式を使用しているため、正解です。
B). @track(getAccounts, '$searchTerm')
構文: @wire の代わりに @track を使用します。
デコレータ: @track デコレータはプロパティをリアクティブにするために使用されます。つまり、コンポーネントはプロパティが変更されると再レンダリングしますが、Apex メソッドのようにプロパティをデータソースに関連付けることはありません。Lightning Web コンポーネント開発者ガイドには、「@track はプロパティを再レンダリング用にリアクティブとしてマークするために使用されますが、サーバーからデータを取得することはありません」と記載されています (Salesforce Lightning Web コンポーネント開発者ガイド、リアクティブプロパティ)。
パラメータ: @track はこの方法では引数を受け入れないため、getAccounts と '$searchTerm' を @track に渡すことは無効です。
結論: @track を使用して Apex メソッドを接続することはできないため、誤りです。
C). @wire(getAccounts, 'searchTerm: $searchTerm')
構文: @wire を使用して getAccounts を呼び出しますが、パラメーターは文字列 'searchTerm: $searchTerm' として渡されます。
パラメータ形式: @wire デコレータは、2 番目の引数として文字列ではなく JavaScript オブジェクト (例: { searchTerm: '$searchTerm' }) を想定しています。Lightning Web コンポーネント開発者ガイドでは、「Apex メソッドの @wire への 2 番目の引数は、パラメータ名と値をマッピングするオブジェクトである必要があります」(Salesforce Lightning Web コンポーネント開発者ガイド、「Apex メソッドへのパラメータの受け渡し」) と規定されています。'searchTerm: $searchTerm' のような文字列を渡すと、ランタイムエラーが発生するか、Apex メソッドが正しく呼び出されません。
結論: パラメータの形式が無効 (オブジェクトではなく文字列) であるため、誤りです。
D). @wire(getAccounts, '$searchTerm')
構文: @wire を使用して getAccounts を呼び出しますが、'$searchTerm' をパラメーター オブジェクトとしてではなく、文字列として直接渡します。
パラメータ形式: getAccounts メソッドは searchTerm というパラメータを必要とするため、正しい形式は { searchTerm: '$searchTerm' } です。'$searchTerm' を単一の値として渡すと、Apex メソッドのパラメータ名にマッピングされず、メソッドは searchTerm の値を受け取らない(または完全に失敗する)ことになります。Lightning Web コンポーネント開発者ガイドには、「オブジェクト内のパラメータ名は、Apex メソッドのパラメータ名と一致する必要があります」(Salesforce Lightning Web コンポーネント開発者ガイド、「Apex メソッドの呼び出し」)と記載されています。
結論: パラメータが Apex メソッドのパラメータにマッピングされた適切にフォーマットされたオブジェクトとして渡されていないため、誤りです。
オプションAが正しい理由:
オプション A が正解である理由は次のとおりです。
@wire デコレータを使用して、getAccounts Apex メソッドを LWC プロパティに適切に接続します。
searchTerm パラメータを正しい形式 { searchTerm: '$searchTerm' } で渡し、Apex メソッドのパラメータを LWC のリアクティブ searchTerm プロパティにマッピングします。
$searchTerm 構文は反応性を保証するため、searchTerm が変更されると getAccounts メソッドが再度呼び出され、LWC のベスト プラクティスに準拠します。
これは、Salesforce Lightning Web コンポーネント開発者ガイドに記載されている、パラメータを使用して Apex メソッドを接続するための標準構文と一致します。
わかりやすくするための例:
完全な LWC JavaScript ファイルでオプション A がどのように使用されるかは次のとおりです。
ジャバスクリプト
コピー
'lwc' から { LightningElement, wire } をインポートします。
import getAccounts from '@salesforce/apex/AccountController.getAccounts'; export default class MyComponent extends LightningElement { searchTerm = ''; // 検索語のリアクティブプロパティ
// getAccounts Apexメソッドをプロパティに接続します
@wire(getAccounts, { searchTerm: '$searchTerm' })
アカウント;
// 例: ユーザー入力に基づいて searchTerm を更新する
handleSearchTermChange(イベント) {
this.searchTerm = イベント.ターゲット.値;
}
}
Apex コントローラー (参考):
頂点
コピー
共有クラス AccountController を持つパブリック {
@AuraEnabled(キャッシュ可能=true)
パブリック静的リスト<Account> getAccounts(String searchTerm) {
[SELECT Id, Name FROM Account WHERE Name LIKE :('%' + searchTerm + '%')] を返します。
}
}
動作: searchTerm が変更されると (たとえば、ユーザー入力により)、@wire デコレータは新しい searchTerm 値で getAccounts を再度呼び出し、accounts プロパティは結果を受け取ります (たとえば、{ data: [/* Account records */]、error: undefined })。
タイプミスの処理:
提供された画像では、オプションは構文的に正しく、修正すべき誤字はありません。ただし、これらのオプションは、getAccounts がApexコントローラに適切にインポートされ定義されていることを前提としており、これは質問の文脈に基づいて推測されます。
質問の表現は明確で、選択肢は一般的な LWC 構文パターンに沿っています。
参考文献:
Salesforce Lightning Web コンポーネント開発者ガイド:
「Apex メソッドの呼び出し」セクション: パラメータの受け渡しなど、Apex メソッドを呼び出すための @wire の使用について詳しく説明します。
「Apex メソッドにパラメータを渡す」セクション: リアクティブ パラメータの { param: '$property' } 構文について説明します。
「リアクティブ プロパティ」セクション: @track の役割 (およびそれがここでは適用されない理由) を明確にします。(次の場所から入手できます。
https://developer.salesforce.com/docs/component-library/documentation/en/lwc/) Salesforce Apex 開発者ガイド:
「AuraEnabled アノテーション」セクション: LWC (@AuraEnabled(cacheable=true)) から Apex メソッドを呼び出すための要件について説明します。(https://developer.salesforce.com/docs/atlas.en-us.apexcode で入手できます。)
メタ/apexcode/)
プラットフォーム開発者 I 学習ガイド:
「ユーザー インターフェース」のセクション: Apex メソッドの配線やリアクティブ性の処理など、LWC の構築について説明します。
(https://trailhead.salesforce.com/en/content/learn/modules/platform-developer-i-certification- study-guide から入手可能)