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

React Hook Form Controller未更新值问题求助

解决React Hook Form弹窗切换条目后数据不更新的问题

问题核心在于React Hook Form的defaultValues仅在组件初始化时生效,后续切换条目导致Item更新时,表单不会自动同步新的默认值,所以Controller始终显示旧条目数据。

给你两个直接可行的解决办法:

方法1:用reset方法手动同步新数据

每次选中的条目(Item)变化时,调用React Hook Form提供的reset方法,把新的条目数据重置到表单中。

修改代码如下:

// 从useForm中解构出reset方法
const { control, handleSubmit, reset } = useForm<Item>({
  defaultValues: {
    name: Item.name,
    description: Item.description,
  },
});

// 监听Item的变化,一旦更新就重置表单
useEffect(() => {
  reset({
    name: Item.name,
    description: Item.description,
  });
}, [Item, reset]); // 依赖项包含Item和reset,确保变化时触发

这样每次切换条目,表单就会自动同步新的条目数据。

方法2:给组件加key强制重新初始化(不推荐但可用)

如果弹窗组件是基于选中条目渲染的,可以给弹窗或表单所在组件添加唯一key(比如条目的ID),切换条目时组件会重新挂载,useForm也会重新读取新的defaultValues。

示例:

<Modal key={Item.id}> {/* 用条目的唯一ID作为key */}
  {/* 你的表单代码 */}
</Modal>

注意:这种方法会触发组件重新挂载,性能不如reset方法,优先选择方法1。

你之前尝试的watch没用,是因为表单字段本身没被更新,watch自然监听不到新值——核心是要把新的Item数据同步到表单字段中。

内容的提问来源于stack exchange,提问作者J.Cart

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 15:27:03