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 meant to be a helper around the JS client.
If you'd prefer to use the JS client directly, this process is documented here.