I've spent some time figuring out why my search wasn't working, just to realize that Algolia's documentation was meant to be used in a common HTML approach. In the end, the app was loading before the script was initilized.
TL;DR: If you're not using Next JS, just ignore the first step and add the script and the styles to your root html (usually index.html
) and initialize it like the last snippet inside the component.
With NextJS, you need to create a file named _document.js
inside pages
(the minimum setup can be found in Next's documentation), and add the CSS and Docsearch script to the Head
. This way the search will be accessible through all the pages.
import Document, { Html, Head, Main, NextScript } from 'next/document' class MyDocument extends Document { static async getInitialProps(ctx) { const initialProps = await Document.getInitialProps(ctx) return { ...initialProps } } render() { return ( <Html> <Head> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.css" /> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/docsearch.js@2/dist/cdn/docsearch.min.js"></script> </Head> <body> <Main /> <NextScript /> </body> </Html> ) } } export default MyDocument
Then, in your component (in my case Navbar.jsx
), initialize the script that you've received, inside componentDidMount
or useEffect
.
... useEffect(() => { if (window.docsearch) { window.docsearch({ apiKey: 'your api', indexName: 'your id', inputSelector: '#algolia-search', // the selector of my search input }) } else { console.warn('Search has failed to load') // do something here } }, []) ...
I hope that this save people some time when implementing Docsearch.
Top comments (0)