You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

表单提交调用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 01:48:03