絞り込み条件
最終更新: 2022年02月11日
概要
RefinementListのカスタムウィジェットを作成します。RefinementListは facet
で設定された属性に基づいて検索結果を絞り込みます。たとえばタグやカテゴリによる絞り込みがよく使われます。
カスタムウィジェットの作成
事前に Tailwind CSS の導入が必要です。
components/custom-refinement-list.tsximport React from 'react'; import { RefinementListProvided } from 'react-instantsearch-core'; import { connectRefinementList } from 'react-instantsearch-dom'; const RefinementList = ({ items, refine }: RefinementListProvided) => { return ( <ul className="space-y-3"> {items.map((item) => ( <li key={item.label} className="flex items-center"> <input checked={item.isRefined} type="checkbox" id={item.label} onChange={(e) => { refine(item.value); }} className="h-4 w-4 border-gray-300 rounded text-indigo-600 focus:ring-indigo-500" /> <label htmlFor={item.label} className="ml-3 text-sm text-gray-500"> {item.label === 'male' ? '男性' : '女性'}({item.count}) </label> </li> ))} </ul> ); }; const CustomRefinementList = connectRefinementList(RefinementList); export default CustomRefinementList;
ポイントは以下です。
items
で絞り込み対象の条件一覧を受け取ってUIを実装していますitem.count
で現在の検索条件に該当する件数を表示しますrefine
により検索条件を反映しています
表示上の特性
- facetはデフォルトで現在の検索条件に該当する件数の多い順で並びます。
- チェックされた項目は自動的に一番上に移動します。
- 現在の検索条件に合致する結果がないfacet値については表示されません。
カスタムウィジェットの使用
InstantSearchタグの中に設置してください。
<CustomRefinementList defaultRefinement={getDefaultRefinement()} attribute="gender" />
attribute="gender"
の部分は絞り込み条件となる facet
を指定します。インデックス管理でfacet
に設定された属性である必要があります。たとえばカテゴリ(category
)で絞り込みたいとしたらfacetにcategory
を設定した上で gender
の部分を category
に変更します。