function Search({ onSearch }) {
const [value, setValue] = React.useState('')
// This is the solution
const debouncedSearch = React.useMemo(
() =>
debounce(val => {
onSearch(val)
}, 750),
[onSearch]
)
const handleChange = React.useCallback(
e => {
setValue(e.target.value)
debouncedSearch(e.target.value)
},
[debouncedSearch]
)
return <input type="text" value={value} onChange={handleChange} />
}