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

React Hook Form结合React Select使用Controller时表单提交无法获取选中值

问题原因
  • 你自定义的onChange覆盖了Controller通过field透传的onChange方法:field.onChange是React Hook Form用来接收组件值更新、同步到表单状态的核心方法,你当前的逻辑仅更新了本地的selectValue状态,没有通知RHF值发生了变化,自然提交时拿不到对应字段的值。
  • 你手动绑定了value={selectValue},完全替换了field自带的和RHF表单状态绑定的value,等于切断了RHF到组件的状态同步链路,Controller没有起到管控组件值的作用。
修复方案

方案1:无需单独维护本地状态(推荐)

大部分场景下不需要自己单独存selectValue,直接使用Controller管控状态即可,代码修改为:

<Controller
  name="ShiftCaptain"
  control={control}
  render={({ field }) => (
    <Select
      {...field}
      options={options}
      placeholder="Select Person"
    />
  )}
/>

如果需要设置初始值,直接在调用useForm时的defaultValues里给ShiftCaptain字段设置对应初始值即可。

方案2:确实需要单独维护本地状态

如果你的业务逻辑需要单独用selectValue做其他处理,可以在自定义onChange里同时调用field.onChange把值同步给RHF:

<Controller
  name="ShiftCaptain"
  control={control}
  render={({ field }) => (
    <Select
      {...field}
      value={selectValue}
      options={options}
      placeholder="Select Person"
      onChange={(e) => {
        setSelectValue(e);
        field.onChange(e);
      }}
    />
  )}
/>

提示:如果只需要将选项的value值存入表单而非整个选项对象,调用field.onChange时传入e.value即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 03:27:07