Open
Description
Description
Using autocomplete in NextJs 13 with the newest react 18 version is causing errors
Reproduction
// using the default example from the api
import React, { useMemo } from "react"
import { createElement, Fragment, useEffect, useRef, useState } from "react"
import { render } from "react-dom"
import { usePagination, useSearchBox } from "react-instantsearch-hooks"
import { autocomplete, AutocompleteOptions } from "@algolia/autocomplete-js"
import { BaseItem } from "@algolia/autocomplete-core"
import { createLocalStorageRecentSearchesPlugin } from "@algolia/autocomplete-plugin-recent-searches"
import "@algolia/autocomplete-theme-classic"
type AutocompleteProps = Partial<AutocompleteOptions<BaseItem>> & {
className?: string
}
type SetInstantSearchUiStateOptions = {
query: string
}
export function Autocomplete({
className,
...autocompleteProps
}: AutocompleteProps) {
const autocompleteContainer = useRef<HTMLDivElement>(null)
const { query, refine: setQuery } = useSearchBox()
const { refine: setPage } = usePagination()
const [instantSearchUiState, setInstantSearchUiState] =
useState<SetInstantSearchUiStateOptions>({ query })
const plugins = useMemo(() => {
const recentSearches = createLocalStorageRecentSearchesPlugin({
key: "instantsearch",
limit: 5,
transformSource({ source }) {
return {
...source,
onSelect({ item }) {
setInstantSearchUiState({ query: item.label })
},
}
},
})
return [recentSearches]
}, [])
useEffect(() => {
setQuery(instantSearchUiState.query)
setPage(0)
}, [instantSearchUiState])
useEffect(() => {
if (!autocompleteContainer.current) {
return
}
const autocompleteInstance = autocomplete({
...autocompleteProps,
container: autocompleteContainer.current,
initialState: { query },
onReset() {
setInstantSearchUiState({ query: "" })
},
onSubmit({ state }) {
setInstantSearchUiState({ query: state.query })
},
onStateChange({ prevState, state }) {
if (prevState.query !== state.query) {
setInstantSearchUiState({
query: state.query,
})
}
},
renderer: { createElement, Fragment, render },
plugins,
})
return () => autocompleteInstance.destroy()
}, [plugins])
return <div className={className} ref={autocompleteContainer} />
}
Steps
install latest next js 18 with src structure, not with app structure
add autocomplete plugins
Expected behavior
shouldn't throw any errors
only happens with autocomplete implemented
Environment
- OS: [ macOS ]
- Browser: [e.g. Chrome, Brave, Firefox]
- Autocomplete version: [e.g. 1.0.0]
Metadata
Metadata
Assignees
Labels
No labels