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

React自定义Input组件调用useForm的register报错不是函数,是否缺导入?

问题根因

你在父组件调用自定义Input时,仅将register("email")执行后返回的表单属性(onChange、onBlur、ref等)展开传给了组件,并未将register函数本身作为props传递,因此子组件内读取的register为undefined,调用时就会抛出「不是函数」的报错。

解决方案

提供两种可行修改方案,二选一即可:

方案1:调整父组件传参逻辑,子组件代码保持不变

修改注册页调用Input的代码,将register函数和name属性单独传入:

<Input 
  placeholder="Email"
  name="email"
  register={register}
  error={errors.email}
/>

该方案无需修改你现有的Input组件实现,内部直接调用register(name)即可正常生成表单绑定属性。

方案2:保留现有父组件调用写法,修改子组件实现

你父组件中{...register("email")}已经生成了react-hook-form需要的所有表单绑定属性,直接删掉子组件中调用register的逻辑即可:

import { InputContainer } from "./styles"

function Input({placeholder, error, ...rest}) {
    return (
        <InputContainer isErrored={!!error}>
            <input 
                placeholder={placeholder} 
                {...rest} 
            />
        </InputContainer>
    )
}
export default Input

使用该方案时记得在父组件调用Input时传入error参数:error={errors.email},用于错误状态展示。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 21:36:03