レコードのリストの使用
Bear List (熊リスト) コンポーネントを作成する
パークレンジャーは、熊のディレクトリをホームページから直接参照したいと考えています。あなたはその熊リストの実装を任されました。
- VS Code で、
lwc
フォルダーを右クリックして [SFDX: Create Lightning Web Component (SFDX: Lightning Web コンポーネントを作成)] をクリックします。 - コンポーネントに「
bearList
」と名前を付けます。 -
bearList.js-meta.xml
ファイルを編集して<isExposed>false</isExposed>
を次の行に置き換えます。 これで、Lightning アプリケーションビルダーであらゆる種別のページにコンポーネントを配置できます。 -
bearList.html
の内容を次に置き換えます。 コードのポイント:-
bears
レコードを反復処理するために、for:each
およびfor:item
ディレクティブを指定するtemplate
タグが使用されています。各反復項目は、bear
プロパティに渡されます。 - テンプレートの各反復は、特別な
key
属性でマークされています。key
は反復のコンテキストで一意の値を持つ必要があります。このコンポーネントの場合は熊 ID になります。
-
-
bearList.js
の内容を次に置き換えます。 コードのポイント:-
ursusResources
アダプターをインポートします。これでアプリケーションに関連付けられた静的リソースにアクセスできます。このアダプターを使用して、テンプレートに熊のシルエット画像の URL を公開するappResources
オブジェクトを作成します。 -
getAllBears
アダプターをインポートします。これでBearController.getAllBears()
Apex メソッドを操作できます。BearController
クラスは、このプロジェクトの始めにリリースしたコードにバンドルされています。getAllBears
メソッドは、すべての熊レコードを取得するクエリの結果を返します。 -
connectedCallback
関数を実装します。これでコンポーネントが読み込まれた後にコードを実行できます。この関数を使用してloadBears
関数をコールします。 -
loadBears
関数はgetAllBears
アダプターをコールします。アダプターは Apex コードをコールし、JS promise を返します。この promise を使用して、返されたデータをbears
プロパティに保存するか、エラーを報告します。このアプローチによるデータの取得は、命令型 Apex と呼ばれます。
-
-
bearList
ディレクトリに新しいbearList.css
ファイルを作成し、そのファイルに次のコードを貼り付けます。 これらの CSS ルールは、熊カードに境界線を追加し、熊のシルエット画像の高さを設定します。 - 更新したコードを組織にリリースします。default フォルダーを右クリックして [SFDX: Deploy Source to Org (SFDX: 組織にソースをリリース)] をクリックします。
Bear List (熊リスト) コンポーネントをアプリケーションのホームページに追加する
新しいコンポーネントをアプリケーションのホームページに追加しましょう。
- 組織に戻り、アプリケーションランチャー (
) で、[Ursus Park] を見つけて選択します。
- [Setup (設定)] (
) をクリックして、[Edit Page (編集ページ)] を選択します。
- [Custom (カスタム)] コンポーネントで bearList コンポーネントを見つけ、ページの左上にドラッグします。
- [Save (保存)] をクリックしてから、[Back (戻る)] をクリックしてホームページに戻り、作業内容を確認します。
ワイヤード Apex を使用する
熊のリストを取得する新しいアプローチを見てみましょう。命令型 Apex の代わりに、ワイヤード Apex を使用します。
-
bearList.html
を編集して、<template if:true={bears}>
を<template if:true={bears.data}>
に置き換えます。 -
<template for:each={bears} for:item="bear">
を<template for:each={bears.data} for:item="bear">
に置き換えます。 -
<template if:true={error}>
を<template if:true={bears.error}>
に置き換えます。この時点で、テンプレートは命令型 Apex 以外はほとんど同じです。単なるbears
の代わりにbears.data
をコールして熊のリストにアクセスし、単なるerror
の代わりにbears.error
をコールしてエラーを取得します。 -
bearList.js
の内容を次に置き換えます。 ワイヤード Apex でbears
プロパティをデコレートして、JS コードを大幅に簡略化しました。必要なデータはすべて、@wire(getAllBears) bears;
の 1 行で取得されます。 - 更新したコードを組織にリリースし、命令型 Apex 以外は同じように動作をすることを確認します。
Apex コールにパラメーターを渡す
Ursus Park 内で生息する熊の数は増加してきています。レンジャーは、熊リストを絞り込み、熊を素早く検索できるようにする必要があります。その役に立つ検索バーを熊リストに追加しましょう。
-
bearList.html
を編集して、<template if:true={bears.data}>
タグの後に次のコードを追加します。 これで検索入力項目が追加されます。値が変更されると、handleSearchTermChange
関数をコールします。 - 次のコードを
</lightning-layout>
終了タグの後に追加します。 これで、結果が見つからなかったことを示すメッセージが追加されます。このメッセージは、hasResults
式が false の場合にのみ表示されます。 -
bearList.js
の内容を次に置き換えます。 コードのポイント:- リアクティブな
searchTerm
プロパティを追加し、それをワイヤード Apex のパラメーターとしてsearchBears
に渡します。 - 検索入力項目の値の変化に反応するために
handleSearchTermChange
関数が使用されています。リアクティブなsearchTerm
プロパティを更新するときに、意図的に 300 ミリ秒の遅延を発生させます。更新が保留中の場合は、キャンセルして 300 ミリ秒後に新しい更新を再スケジュールします。ユーザーが単語を形成する文字を入力するときに、この遅延によって Apex コールの数が削減されます。1 文字ごとにhandleSearchTermChange
へのコールがトリガーされますが、理想的なのは、ユーザーが入力し終わったときにsearchBears
が 1 度だけコールされることです。この手法を「デバウンス」といいます。 -
hasResults
式を公開して、検索で熊が返されたかどうかを確認します。
- リアクティブな
- 更新したコードを組織にリリースし、検索が結果の有無に関わらず機能することを確認します。
このステップはこれで完了です。命令型 Apex、次にワイヤード Apex を使用してレコードリストを処理する方法を確認し、Apex コールにパラメーターを渡す方法を学びました。その過程で大幅に増えてしまったコンポーネントのコードを、管理しやすいようにサブコンポーネントに分割しましょう。