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

React Hook Form传register给子组件报'register is not a function'解决方法

解决React Hook Form中'register is not a function'错误

错误核心原因

这个错误说明子组件接收到的register并非函数,问题出在父组件useForm的调用、register的传递环节,或是违反了React Hook的使用规则。

具体解决步骤

1. 检查父组件useForm的基础使用

  • 确保已正确导入useForm:
    import { useForm } from "react-hook-form";
    
  • 严格遵守Hook规则:useForm必须在函数组件的顶层作用域调用,不能放在条件判断、循环或嵌套函数内部,否则会导致Hook返回值异常。

2. 验证register的传递有效性

  • 在父组件中临时添加日志,确认register的类型:
    const { register } = useForm();
    console.log(typeof register); // 正常应输出"function"
    
    如果输出不是function,检查useForm的调用是否符合规则,或是确认已安装正确版本的React Hook Form。
  • 子组件接收props时,确保register的名称拼写完全一致,避免因重命名或拼写错误导致接收异常。

3. 修正子组件Checkbox的绑定逻辑(顺带优化功能)

原代码中Checkbox的value写死为字符串"status?.name",会导致提交数据不是实际状态名称;同时多个Checkbox需要配置数组模式才能正确收集多选值:

const CheckboxFilter = ({ status, register }) => {
  return (
    <p className='text-[#858585] mt-2 text-[14px]' >
      <label htmlFor={status.name} className='cursor-pointer' >
        <input 
          {...register("checkBoxData", { valueAsArray: true })} 
          type="checkbox" 
          id={status.name} 
          value={status.name} 
        /> 
        {status.name}
      </label>
    </p>
  );
};

通过{ valueAsArray: true }配置,React Hook Form会自动将选中的Checkbox值收集为数组,提交时data.checkBoxData即为所有选中状态名称组成的数组。

4. 确认React Hook Form版本兼容性

如果项目使用v6及以下版本,register的用法与v7差异较大(v6需通过ref绑定),建议升级至v7版本,或根据对应版本调整代码逻辑。


内容的提问来源于stack exchange,提问作者Md Borhan Uddin Ashik

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 17:45:47