If you're using InstantSearch already, we recommend using connectors so that state is shared and to benefit from all the other features like middleware and routing.
Using our hooks should cover most use cases but you can also create a new widget if needed.
If you would prefer not to use InstantSearch, you can use the algoliasearch-helper
to write your custom React components, as this is a helper for the JS client.
If you'd prefer to use the JS client directly, this process is documented here.