Algolia Instantsearchで、検索結果クリック時にキーワードをリセットする
Algolia Instantsearchをヘッダーなどレイアウト部分に配置している場合、「リンクをクリックしてページ遷移した後は、検索結果を表示しない」動作を実装したくなります。 connectSearchBoxとHi […]
広告ここから
広告ここまで
目次
Algolia Instantsearchをヘッダーなどレイアウト部分に配置している場合、「リンクをクリックしてページ遷移した後は、検索結果を表示しない」動作を実装したくなります。
connectSearchBoxとHitsを組み合わせる
検索フォームのキーワードをリセットするには、connectSearchBox
をHits
またはconnectHits
と組み合わせて使用します。
import {
connectSearchBox, Hits
} from 'react-instantsearch-dom';
export const AlgoliaSearchResult = connectSearchBox(({refine, currentRefinement}) => {
const [isShow, shouldShow] = useState(false)
useEffect(() => {
shouldShow(!!currentRefinement)
}, [currentRefinement, shouldShow])
const handleResetSearchWords = useCallback(() => {
refine('')
}, [refine])
if (!isShow) return null;
return (
<Hits hitComponent={({hit}) => (
<Link href={slug}>
<span onClick={() => handleResetSearchWords
()}>{hit.title}</span>
</Link>
)) />
)
}
currentRefinement
の値をuseEffect
で監視し、キーワードが入力されていない場合は結果を表示させません。
また、Link
をクリックした場合のクリックイベントを使い、refine('')
でキーワードをリセットしています。これはReact RouterやNextあたりのRouterイベントを使ってもよいかもしれません。