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

受控组件中defaultValue随state值变更问题及校验需求

输入框默认值与当前值的校验处理

要实现对比输入值与默认值的校验逻辑时,会遇到一个问题:当通过state设置输入框的值时,defaultValue会随之同步变更,无法保留初始的默认值。

解决办法是通过ref来获取并留存初始默认值,同时获取当前输入值,以此完成校验逻辑。

受控组件问题示例

以下是出现问题的受控组件代码,这里同时设置了value和defaultValue,导致defaultValue会随着state的更新而变化:

const [value, setValue] = useState('helo')

<form onChange={e => console.log(e)}>
  <input
    defaultValue={5}
    value={value}
    onChange={e => {
      const format = () => {};
      setValue(format(e.target.value))
    }}
  />
</form>

非受控组件正常表现示例

在非受控组件中,defaultValue的表现符合预期,只会作为初始值,不会随输入变化而变更:

<form onChange={e => console.log(e)}>
  <input defaultValue={5} />
</form>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 10:03:10