这是我的问题:我正在使用带有较新useState钩子的反应钩子功能组件。该useState钩子返回一个用于更新该状态的更新程序函数。更新程序功能是我遇到的问题,这是 React 如何工作的常识。在dom重新渲染之前,状态不会更新。但我需要onSubmit通过axios(或fetch)发送表单数据。
const App = () => {
const [username, setUsername] = useState('')
const handleSubmit = (e) => {
e.preventDefault()
setUsername(e.target.elements.form1.value)
axios.post('http://localhost:3000/api', { name: username })
}
return (
<div>
<form onSubmit={handleSubmit}>
<input type="text" name="form1" placeholder="Enter name:" />
<button type="submit">Submit</button>
</form>
</div >
)
}Run Code Online (Sandbox Code Playgroud)
在此代码中,当表单与onSubmit表单标记上的事件一起提交时,将handleSubmit()调用该函数。在这里,setUsername()更新程序函数将更新状态并axios运行对后端服务器的后期调用。但是axios.post将始终只发送先前的状态值,因为该setUsername()函数在dom重新呈现之前不会完成。所以进入后端的数据总是落后一步。
正确执行此操作的最佳方法是什么?对于我的表单输入,我真的不需要将它们呈现给dom,我只需要将表单信息传递给后端。我什至不应该把这些数据放在状态中吗?如果是这样,用大表格做到这一点的最佳方法是什么?说 10 个输入值?
我还看到人们在输入表单中使用 value={some …