useSearchState | Yext Hitchhikers Platform
useSearchState reads a value from the SearchHeadless instance and subscribes to updates. It’s used by all the components in the Search UI React library and you can also use it to build custom components.
useSearchState MUST be used in a component that is wrapped in a
SearchHeadlessProvider
.
Basic Example
Here’s a simple example that uses useSearchState that renders the most recent search query:
import { useSearchState } from '@yext/search-headless-react';
export default function MostRecentSearch() {
const mostRecentSearch = useSearchState(state => state.query.mostRecentSearch);
return <div>Showing results for {mostRecentSearch}</div>;
}You can see all the possible fields stored in state in the
Github documentation
.
Extending Search UI Component Functionality
useSearchState can be used to extend or override the functionality of some of the Search UI components.
In this example, a component that says “loading” is rendered until a search is complete:
import { useSearchState } from "@yext/search-headless-react";
import {
SearchBar,
StandardCard,
VerticalResults,
} from "@yext/search-ui-react";
const SearchComponent = () => {
const loading = useSearchState((state) => state.searchStatus.isLoading);
return (
<div className="flex justify-center px-4 py-6">
<div className="w-full max-w-5xl">
<SearchBar />
{loading ? (
<div>Loading...</div>
) : (
<VerticalResults CardComponent={StandardCard} />
)}
</div>
</div>
);
}
export default App;Creating Custom UI Components
You can use the useSearchState hook (often in combination with the useSearchActions hook) to create your own Search UI components. The
Building a Custom Facet Component
guide walks you through how to build your own facet component with hooks.
API Reference
You can subscribe to any part of the SearchHeadless state with the useSearchState hook. To see what State looks like, check out this
Github documentation
.