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

首次调用onSubmit时FormData返回空,第二次正常的解决方案

问题解决:首次提交FormData为空,第二次才有效

问题根源

React的useState状态更新是异步的。你在submitHandler里创建完formDatas后立刻调用setSendData(formDatas),但此时sendData并不会马上变成新的FormData,紧接着的console.log(sendData)拿到的还是更新前的旧值(初始是空字符串)。第二次提交时,sendData才会更新成第一次创建的FormData,所以看起来第二次才有数据,但这其实是滞后的旧数据。

解决方案

方案1:直接使用创建好的FormData(推荐)

既然要提交数据,根本不需要把FormData存到state里,直接用刚创建的formDatas做后续操作就行:

const submitHandler = (e) => {
    e.preventDefault()
    const formDatas = new FormData()
    formDatas.append('name', name)
    formDatas.append('occupation', occupation)
    formDatas.append('bio', paragraph)
    formDatas.append('join', date)
    formDatas.append('image', img)
    
    // 直接用formDatas打印或发请求
    console.log(formDatas)
    axios
    .post(api + '/members', formDatas)
    .then(res => console.log(res))
    .catch(err => console.log(err))
}

方案2:监听state变化再操作(如果确实需要存state)

如果一定要把FormData存在state里,就用useEffect监听sendData的变化,在状态更新后再执行打印或请求:

import { useEffect } from 'react'

// ... 其他代码不变

const submitHandler = (e) => {
    e.preventDefault()
    const formDatas = new FormData()
    formDatas.append('name', name)
    formDatas.append('occupation', occupation)
    formDatas.append('bio', paragraph)
    formDatas.append('join', date)
    formDatas.append('image', img)
    setSendData(formDatas)
}

// 监听sendData变化
useEffect(() => {
    if (sendData instanceof FormData) {
        console.log(sendData)
        axios
        .post(api + '/members', sendData)
        .then(res => console.log(res))
        .catch(err => console.log(err))
    }
}, [sendData])

额外优化建议

你现在用多个state管理表单字段,可以改成用一个state对象来管理,代码会更简洁:

const [formData, setFormData] = useState({
    name: '',
    occupation: '',
    paragraph: '',
    date: ''
})

const handleInputChange = ({target:{name, value}}) => {
    setFormData(prev => ({...prev, [name]: value}))
}

// 然后在input上设置name属性,比如:
// <input name="name" value={formData.name} onChange={handleInputChange} />

内容的提问来源于stack exchange,提问作者ieatglue

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 07:10:28