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

react-hook-form v7版本如何重置使用setValues设置的表单值?

问题原因说明

react-hook-form 无参调用reset()时,只会将表单恢复到初始化时传入的defaultValues状态,你后续通过setValue设置的预填充值不会更新这个默认基准,所以才会出现重置后回到API预填值的情况。原生的form.reset()只会修改DOM上的输入值,不会同步更新react-hook-form内部维护的表单状态,因此修改不会生效。

解决方案

方案1:使用react-hook-form带参数的reset方法(推荐)

直接给reset方法传入你需要重置到的目标空值结构即可,完全符合react-hook-form的设计逻辑:

// 手动指定所有字段的空值,和你的表单字段结构保持一致
reset({
  'input-field-name': '',
  // 其他字段按需设置为空字符串或null
  'field-1': null,
  'field-2': ''
})

如果表单字段较多不想逐个枚举,可以用如下写法一次性生成空值结构:

// 获取当前所有注册字段的键,批量生成空值对象
const emptyForm = Object.fromEntries(
  Object.keys(getValues()).map(fieldKey => [fieldKey, ''])
)
reset(emptyForm)

优化提示:如果后续需要多次清空表单,建议你在首次做API预填充时就用reset代替setValue赋值,这样会直接更新reset的默认基准值,后续无参调用reset也会直接回到预填状态,需要清空时再传空值参数即可:

// 预填API值时用reset代替setValue
reset({
  'input-field-name': 'value-got-from-api'
})

方案2:原生JS兜底实现

如果需要用原生方法实现,要同时同步DOM值和react-hook-form的内部状态:

const form = document.getElementById('myform')
// 先重置DOM上的输入内容
form.reset()
// 遍历所有表单元素,同步更新react-hook-form的内部状态
Array.from(form.elements).forEach(item => {
  if (item.name) {
    setValue(item.name, '')
  }
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:36:02