【发布时间】:2022-01-17 21:29:42
【问题描述】:
我正在努力实现类似的目标,
每当用户更改任何输入字段值时,正常更新状态值并执行一些操作,例如提交具有更新状态值的表单。
我正在做
const [data, setData] = useState({
search: '',
field: '',
direction: '',
})
const onHandleChange = (e) => {
setData({
...data,
[e.target.name]: e.target.value,
})
// Do soemthing with the updated data, for now I'll just console.log
console.log(data);
}
<input type="search" name="search" onChange={onHandleChange} value={data.search} />
如屏幕截图所示,如果我输入123,最新的控制台日志将是12
它总是落后 1 步:/
我想到使用useEffect()的一件事
但useEffect 也运行第一个渲染,这是我不想要的。我不希望表单在第一次渲染时提交,但只有在用户更改任何内容时才提交。
【问题讨论】:
-
@AmmarOker 不,因为他们没有使用
useState挂钩,我尝试将回调函数作为第二个参数,但它不起作用。 -
TL;DR React 状态更新是异步处理的,使用依赖于状态更新的
useEffect钩子来处理更新状态的副作用。有一些常见的模式可以在初始渲染时跳过useEffect回调。无论如何,您应该只在需要时才提交表单,所以它应该已经在某种条件逻辑之下/之后,对吧?
标签: reactjs react-hooks use-state