表单提交调用setDate后date状态未更新,首次提交date字段为空
问题原因
- React 中的状态更新(即你调用的
setDate)是异步批量执行的,不会在调用后立刻修改当前作用域下的date变量,只有等到当前的onSubmit函数执行完毕、触发组件重渲染后,才能拿到更新后的date值。 - 你第一次调用
setDate之后立刻发起 axios 请求,此时读取的date还是更新前的初始空值,所以提交的 date 字段为空;等第一次提交结束组件重渲染后,date已经被更新为第一次设置的时间值,第二次提交时读取的就是这个已经更新完成的值,所以第二次能成功赋值。
解决方案
直接把计算好的时间值存为临时变量,同时传给setDate和请求参数即可,不需要依赖状态里的旧值:
const onSubmit = e => { e.preventDefault(); // 先把计算好的时间存到临时变量 const formattedDate = moment(Date.now()).format(format1); setDate(formattedDate); axios .post('http://localhost:4000/questions', { ques: ques, quesBrief: quesBrief, hashes: hashes, author: author, date: formattedDate, // 直接用临时变量,不用状态里的旧值 }) .then(res => { console.log(res.data); history.push('/'); }) .catch(err => { console.log(err); }); };
内容的提问来源于stack exchange,提问作者krishna-chavan
相关产品推荐
相关产品推荐

