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

react-hook-form中useFormContext获取的register无法同步表单状态?

问题解决:useFormContext 获取的 register 无法同步表单值

可能的原因及修复方案

1. 父组件未使用上下文内的 handleSubmit

你的父组件中,提交逻辑使用的 handleSubmit 未关联 FormProvider 上下文,导致无法读取通过 useFormContext 注册的字段值。必须使用 methods.handleSubmit 而非全局导入的方法。

修复后的父组件代码:

const methods = useForm();

function onSubmit(data) { console.log(data) }

<FormProvider {...methods}>
  <form onSubmit={methods.handleSubmit(onSubmit)}> {/* 改为 methods.handleSubmit */}
    <DateInput
      fieldName={'dateOfBirth'}
      label={'Date of Birth'}
    />
    <button type="submit">提交</button>
  </form>
</FormProvider>

2. 未正确导入核心 API

确保 FormProvider 和 useFormContext 都从 react-hook-form 正确导入:

// 父组件
import { useForm, FormProvider } from "react-hook-form";

// 子组件
import { useFormContext } from "react-hook-form";

3. 自定义 Input 组件未转发必要 props

如果你的 Input 是自定义组件,必须将 register 传递的所有 props(如 onChange、value、name)转发给原生 <input> 标签:

// 示例自定义 Input 组件
function Input({ type, placeholder, ...rest }) {
  return <input type={type} placeholder={placeholder} {...rest} />;
}

4. 可选:确认表单初始化配置

如果需要预设字段值,确保 useForm 初始化时配置正确的默认值:

const methods = useForm({
  defaultValues: {
    dateOfBirth: "" // 确保字段在表单状态中存在
  }
});

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 09:32:37