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

React表单提交后调用HandleClear函数无法清空表单字段问题求助

问题原因

你的表单所有元素均为非受控组件,仅通过onChange事件收集表单值存入state,但没有将元素的展示属性和state绑定,因此state清空后不会同步更新DOM的展示内容。

额外注意:你的手机号输入框重复定义了name属性,保留name="PhoneNumber"即可,删除多余的name="phone",避免值收集异常。

修复步骤

1. 给文本类输入、下拉选择框绑定value属性

// 用户名输入框
<input type="text" className="form-control" placeholder='UserName' name="UserName" onChange={handleChnage} value={data.UserName} />

// 手机号输入框
<input className="form-control" placeholder='PhoneNumber' name="PhoneNumber" onChange={handleChnage} value={data.PhoneNumber} />

// 邮箱输入框
<input type="email" className="form-control" placeholder='EmailAddress' id="exampleInputEmail1" aria-describedby="emailHelp" name="email" onChange={handleChnage} value={data.email} />

// 下拉选择框,注意默认选项要加value=""和清空后的state对应
<select className="form-select" aria-label="Default select example" name="dropDown" onChange={handleChnage} value={data.dropDown}>
  <option value="">Select From Dropdown</option>
  <option value="ReactJS">ReactJS</option>
  <option value="JavaScript">JavaScript</option>
  <option value="HtmlCss">HtmlCss</option>
</select>

2. 给单选框绑定checked属性

// 男单选框
<input className="form-check-input" type="radio" name="gender" id="male" value="male" onChange={handleChnage} checked={data.gender === 'male'} />

// 女单选框
<input className="form-check-input" type="radio" name="gender" id="female" value="female" onChange={handleChnage} checked={data.gender === 'female'} />

// 其他单选框
<input className="form-check-input" type="radio" name="gender" id="others" value="others" onChange={handleChnage} checked={data.gender === 'others'} />

3. 给复选框绑定checked属性

// Javascript复选框
<input className="form-check-input" type="checkbox" name="checking"  value="Javascript" onChange={handleChnage} checked={data.checking.includes('Javascript')} />

// React JS复选框
<input className="form-check-input" type="checkbox" name="checking" value="React JS" onChange={handleChnage} checked={data.checking.includes('React JS')} />

// HTML复选框
<input className="form-check-input" type="checkbox" name="checking"  value="HTML" onChange={handleChnage} checked={data.checking.includes('HTML')} />

// CSS复选框
<input className="form-check-input" type="checkbox" name="checking"  value="CSS" onChange={handleChnage} checked={data.checking.includes('CSS')} />

可选优化

如果你的dispatch(allActions.createData(data))是异步接口请求,建议将handleClear()放到请求成功的回调里执行,避免接口请求还没完成就清空了表单数据:

const handleSubmit = async (e) => {
  e.preventDefault();
  await dispatch(allActions.createData(data));
  handleClear();
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 07:24:03