使用去抖 onChange 处理程序设置输入值

El *_*imo 3 debouncing react-hooks

在我的 React Hooks 应用程序中,我需要让用户在输入字段中键入 1000 毫秒。当 1000 毫秒到期时,将发送带有输入值的 API 请求。

<input type='text' name='name' className='th-input-container__input' onChange={evt => testFunc2(evt.target.value)} />
Run Code Online (Sandbox Code Playgroud)

该值设置为testFunc2(evt.target.value)

const testFunc2 = useCallback(debounce((text) => setNameFilter(text), 1000), []);
Run Code Online (Sandbox Code Playgroud)

一旦nameFilter设置为新值,useEffect就会发出 API 请求,因为nameFilter它是依赖项。这样,仅使用最终的用户输入而不是每个击键值来查询 API,但输入仍不受控制。当我将当前nameFilter值添加到输入时,value={nameFilter}用户无法在输入中键入,并且输入仅接收最后键入的字符。

如何让用户输入的字符显示在输入中?

Huỳ*_*yễn 5

更新的答案:

const debouncedApiCall = useCallback(debounce((text) => {
  getRecordsForPage(1, text, '', '', '', '', 10, {});
}, 1000), [])

useEffect(() => {
  debouncedApiCall(nameFilter);
}, [nameFilter, debouncedApiCall])

<input type='text' value={nameFilter} onChange={evt => setNameFilter(evt.target.value)} />
Run Code Online (Sandbox Code Playgroud)

  • 以下是我对您的解决方案进行的更改,以使其产生所需的结果。请考虑将它们添加到解决方案中,以便我可以接受它。`const debouncedApiCall = useCallback(debounce((text) =&gt; getRecordsForPage(1, text, '', '', '', '', 10, {}), 1000), []);`。`useEffect(() =&gt; { debouncedApiCall(nameFilter); }, [nameFilter, debouncedApiCall]);`。“input”元素代码如您的解决方案中提供的。`getRecordsForPage` 是发送请求的 API 调用方法。 (2认同)