This is the React InstantSearch v7 documentation.
If you’re upgrading from v6, see the upgrade guide.
If you were using React InstantSearch Hooks,
this v7 documentation applies—just check for necessary changes.
To continue using v6, you can find the archived documentation.
InstantSearch offers three levels of increasing control over your UI:
- Start with a predefined widget that you can configure and style with CSS.
- To change the render output of a widget, use Hooks to render what you want.
- To implement something that doesn’t exist, create a custom Hook.
Predefined widgets
The recommended way to use InstantSearch is with its predefined widgets such asSearchBox
.
InstantSearch includes a set of widgets that are most often used in search experiences.
Widgets provide features and a rendered output.
You can place them anywhere on your UI, configure them, and style them with CSS.
For example, add the RefinementList
` widget and ask it to show a list of brands, so your users can refine their search using those brands.
React
The InstantSearch wrapper
TheInstantSearch
wrapper communicates between your app and Algolia.
This is where you add all the widgets.
It accepts a search client and an index name.

CSS theme
The predefined widgets in React InstantSearch are compatible with the default CSS theme:
If you use Hooks and you want to use the default theme in your app,
follow the markup from the predefined widgets and use the InstantSearch class names.
Use Hooks
Algolia’s predefined widgets, with their fixed behavior and output, may not fully meet your requirements. For example, you might want to use React InstantSearch with a component library like Material UI or render to a non-DOM target like React Native. To address these limitations, use Hooks to construct the UI you want:useBreadcrumb
useClearRefinements
useConfigure
useCurrentRefinements
useDynamicWidgets
useHierarchicalMenu
useHits
useHitsPerPage
useInfiniteHits
useMenu
usePagination
usePoweredBy
useRange
useRefinementList
useSearchBox
useSortBy
useStats
useToggleRefinement
Example component
Here’s an example of a customRefinementList
component created with
useRefinementList
,
and mounted in the InstantSearch
provider.
Pass stable references
When you provide a function to Hooks, make sure to pass a stable reference to avoid rendering endlessly (for example, withuseCallback
).
Objects and arrays are memoized; you don’t need to stabilize them.
React
Custom Hooks
React InstantSearch works with all InstantSearch.js connectors: from Algolia, from the community, or even your own. To create a Hook:- Create a connector.
- Use
useConnector
to turn the connector into a Hook:
InstantSearch
.