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

ReactJS未修改输入框默认值提交为null的解决方法咨询

React 输入框默认值未修改无法提交问题解决方案

问题根因

你当前混用了非受控组件(使用defaultValue属性)和受控组件的状态逻辑:接口返回的初始数据仅赋值给了输入框的默认显示值,没有同步到提交用的member状态中,未触发过修改的字段就一直保留初始化时的空字符串,最终提交时出现空值。

具体修改方案

1. 调整状态初始化逻辑

将data的初始值改为空数组,避免后续判断length时报错:

const [data, setData] = useState([]);
const [member,setMember]=useState({ 
  RefPerLVL1:"",RefPerLVL2:"",RefPerLVL3:"",RefPerLVL4:"",RefPerLVL5:"",RefPerLVL6:"",
  RefPerLVL7:"",RefPerLVL8:"",RefPerLVL9:"",RefPerLVL10:"",RefPerLVL11:"",RefPerLVL12:""
})

2. 接口请求成功后同步初始化member

在useEffect中拿到接口返回数据时,同时给member赋值初始值:

useEffect(() => {
  async function fetchBooks() {
    const response = await fetch('/refpayget');
    const json = await response.json();
    const resData = json.rf2;
    setData(resData);
    // 用接口返回值初始化member
    if(resData?.length) {
      setMember(prev => ({...prev, ...resData[0]}))
    }
  }
  fetchBooks();
},[]);

3. 将输入框改为完全受控组件

把所有Form.Control的defaultValue属性替换为value,和member状态绑定,保证输入框显示和状态完全一致:

<Form.Control 
  size="sm" 
  type="text" 
  name="RefPerLVL1" 
  placeholder="Enter Amount" 
  autoFocus 
  value={member.RefPerLVL1}
  onChange={handleInputs}
/>
// 其余11个输入框统一按上面的逻辑修改

4. 简化提交逻辑

提交时直接传整个member对象即可,无需逐个解构字段:

const postData=async ()=>{
  const res=await fetch("/refpaypost",{
    method:"POST",
    headers:{
      "Content-Type":"application/json"
    },
    body:JSON.stringify(member)
  });
  const resData=await res.json();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 19:45:04