javascript - React 中 onChange 或 onSubmit 中是否将表单输入保存到状态

标签 javascript reactjs

我刚开始学习React,就遇到了这个问题,我认为应该有一个常规的方法来解决它。

我有一个包含输入表单。我开始将 input 制作为受控组件,将其值绑定(bind)到状态变量并更新 inputonChange 中的状态。但是,此表单是搜索栏的一部分,我不想在用户键入时触发搜索。我只想在用户提交表单时触发搜索。因此,我必须创建一个新的状态变量(我正在使用钩子(Hook)),代码如下所示:

const [searchTerm, setSearchTerm] = useState(DEFAULT_VALUE);
const [submittedSearchTerm, setSubmittedSearchTerm] = useState(DEFAULT_VALUE);

useEffect(() => {
  // fetch search results
}, [submittedSearchTerm]);

...

function handleChange(e) {
  setSearchTerm(e.target.value);
}

function handleSubmit(e) {
  setSubmittedSearchTerm(searchTerm);
  e.preventDefault();
}

// Simplified
return (
  <form onSubmit={handleSubmit}>
    <input value={searchTerm} onChange={handleChange} />
  </form>
);

基本上,subscribedSearchTerm 是用户提交表单时 searchTerm 的快照。这可行,但必须复制状态感觉很奇怪。

有没有一种通用的方法可以更优雅地解决这个问题?

最佳答案

除非您需要在组件渲染上进行提取,否则这样做有什么问题:

const [searchTerm, setSearchTerm] = useState(DEFAULT_VALUE);

useEffect(() => {
  // do stuff that should be done on component render
}, []);

...

function handleChange(e) {
  setSearchTerm(e.target.value);
}

function handleSubmit(e) {
  e.preventDefault();
  // fetch search results
}

// Simplified
return (
  <form onSubmit={handleSubmit}>
    <input value={searchTerm} onChange={handleChange} />
  </form>
);

关于javascript - React 中 onChange 或 onSubmit 中是否将表单输入保存到状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56943427/

相关文章:

javascript - Cufon textShadow + hover问题

javascript - 响应式菜单的子菜单在离开屏幕时不会强制滚动

javascript - 根据当前状态 react setState

javascript - ReactJS、CSS 和 SVG 动画,以及重新渲染

javascript - 未捕获(在 promise 中)

javascript - 如何使用 es6 语法导入 ReactCSSTransitionGroup?

javascript - 带有自定义图像的触摸栏图标无法在 Electron 中加载

javascript - 保存 html 页面 + 更改所有链接以指向正确的位置

javascript - 使用 JavaScript 隐藏最后一个 DIV?

javascript - 为什么我的 this.setState 不更新数组