javascript - ReactJS 在打字时延迟 onChange

标签 javascript reactjs

我需要更改状态以维护用户正在键入的字符串。但是我想延迟操作直到用户停止打字。但我不太清楚如何做到这两点。

因此,当用户停止输入时,我希望触发一个操作,但不是在此之前。有什么建议吗?

最佳答案

使用 React Hooks 和 Function 组件

要保留用户正在输入的字符串,请使用 useState Hook 来存储用户正在输入的文本。然后将该状态赋予输入值。另请务必在输入的 onChange 事件处理程序上使用 setState,否则输入值不会更改。

要仅在用户停止键入后的某个时间触发操作,您可以将 useEffect Hook 与 setTimeout 一起使用。在本例中,我们希望在输入值更改时触发 useEffect,因此我们将创建一个 useEffect Hook ,并在其依赖项数组上为其提供值为输入。提供给 useEffect 的函数应使用 setTimeout 在所需的延迟时间后触发操作。此外,为 useEffect 提供的函数应该返回一个清除超时设置的清理函数。这可以避免对不再与用户相关的输入值执行操作。

下面是一个应用程序的小示例,它使用上述步骤来保持用户正在键入的字符串可见,并在用户停止键入后 500 毫秒显示完成的字符串。

function App() {
  const [query, setQuery] = useState("");
  const [displayMessage, setDisplayMessage] = useState("");

  useEffect(() => {
    const timeOutId = setTimeout(() => setDisplayMessage(query), 500);
    return () => clearTimeout(timeOutId);
  }, [query]);

  return (
    <>
      <input
        type="text"
        value={query}
        onChange={event => setQuery(event.target.value)}
      />
      <p>{displayMessage}</p>
    </>
  );
}

关于javascript - ReactJS 在打字时延迟 onChange,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53071774/

相关文章:

javascript - 是什么原因导致 $().val() 有时不起作用?

javascript - React props 的变化超出预期

javascript - 如何从我的 react-native 应用程序打开笔记本电脑上的 chrome 选项卡(就像远程调试一样)?

reactjs - 如何重命名由 create react app 创建的文件夹?

javascript - OWL 轮播在自动播放中添加 #slide-0/1/2

javascript - 如何在内容类型设置为 application/javascript 的 PHP 中回显正斜杠

javascript - setState 函数未定义

javascript - 从嵌套数组中删除特定项目并保存结果,如何使此代码更清晰

JavaScript AngularJS 括号数组

javascript - 等待 $.post 完成