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

React Hook Form:如何在自定义输入组件中获取RegisterOptions

在React Hook Form中访问自定义组件的RegisterOptions

要避免重复传递required这类规则,有两种简洁的方案:

方案1:单独定义规则并复用

先把register的配置项单独抽离成变量,同时传给组件和register,组件就能直接读取规则:

// 父组件中定义规则
const firstNameRules = { required: "This is required" };

// 使用自定义组件
<MyInput
  name="firstName"
  label="First Name"
  {...register("firstName", firstNameRules)}
  rules={firstNameRules}
/>

自定义组件中通过props.rules访问:

const MyInput = React.forwardRef(({ name, label, rules, ...rest }, ref) => {
  // 判断是否为必填项
  const isRequired = !!rules?.required;

  return (
    <>
      <label htmlFor={name}>
        {label} {isRequired && <span style={{color: 'red'}}>*</span>}
      </label>
      <input name={name} placeholder="Jane" {...rest} ref={ref} />
    </>
  );
});

方案2:使用useController(推荐)

这是React Hook Form官方推荐的自定义受控组件方案,能直接在组件内获取规则、字段状态等信息,无需额外传递规则:

改写自定义组件

import { useController } from "react-hook-form";

const MyInput = ({ control, name, label, rules }) => {
  const { field, fieldState } = useController({
    control,
    name,
    rules,
  });

  // 直接从rules中判断必填
  const isRequired = !!rules?.required;

  return (
    <>
      <label htmlFor={name}>
        {label} {isRequired && <span style={{color: 'red'}}>*</span>}
      </label>
      <input
        id={name}
        {...field}
        placeholder="Jane"
      />
      {/* 直接显示错误信息 */}
      {fieldState.error && <p style={{color: 'red'}}>{fieldState.error.message}</p>}
    </>
  );
};

父组件中使用

import { useForm } from "react-hook-form";

function App() {
  const { control, handleSubmit } = useForm();

  const onSubmit = (data) => console.log(data);

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <MyInput
        control={control}
        name="firstName"
        label="First Name"
        rules={{ required: "This is required" }}
      />
      <button type="submit">Submit</button>
    </form>
  );
}

这种方式不仅能获取规则,还能直接拿到字段的错误状态、值等,完全符合React Hook Form的设计理念,彻底避免重复配置问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 19:25:32