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

React Hook Form使用reset重置Controller字段到默认值报错如何解决

报错原因

你在reset的参数里直接写了selectedBirthMonth,这是你给Controller字段设置的name字符串,不是你声明过的JS变量,运行时找不到该变量自然抛出未定义错误。

重置功能修复方案

针对回到首次渲染默认状态的需求,有两种可行写法:

方案1(推荐,react-hook-form v7及以上版本适用)

使用自带的resetField方法,直接传入字段名的字符串即可,会自动匹配该字段的defaultValue完成重置:

<input
  style={{ display: "block", marginTop: 20 }}
  type="button"
  onClick={() => resetField("selectedBirthMonth")}
  value="Reset with values"
/>

方案2(兼容旧版本)

如果使用reset方法,需要传入对应字段的键值对对象,值填你一开始给该字段设置的默认值selectedMonth即可:

<input
  style={{ display: "block", marginTop: 20 }}
  type="button"
  onClick={() => reset({ selectedBirthMonth: selectedMonth })}
  value="Reset with values"
/>

额外注意事项

你当前在Controller的render回调函数内直接调用useEffect不符合React的Hook调用规则,Hook只能在组件的最顶层调用,不能内嵌在其他函数、回调里。你可以把这部分监听逻辑移到组件外层,或者直接在SelectBirthMonth的onChange回调里处理值变化逻辑,避免后续出现运行异常。

后续兄弟组件联动重置实现

如果之后需要根据兄弟组件的值触发该字段重置,只需要在监听兄弟组件值的useEffect中调用上面的resetField("selectedBirthMonth")逻辑即可,不需要额外调整字段配置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:24:02