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} /> }