react-hook-form报错:yupResolver期望6个参数却仅传入1个
问题原因及解决方案
原因
这个报错是因为yupResolver的调用方式与你安装的@hookform/resolvers版本不兼容,或存在类型使用错误:
- 新版@hookform/resolvers(v3+)的yupResolver不再需要手动传入泛型参数,强行添加
<SampleProps>会导致类型校验失败,触发参数数量不匹配的报错。 - 也可能是react-hook-form与@hookform/resolvers版本不匹配,比如用v3版本的resolver搭配v6版本的react-hook-form。
解决方案
1. 修正yupResolver调用方式
去掉yupResolver后的泛型声明,直接传入schema即可;若需指定表单类型,将泛型放在useForm上:
import { useForm } from "react-hook-form"; import { yupResolver } from "@hookform/resolvers/yup"; import * as yup from "yup"; interface SampleProps { firstName: string; address: object; contact: string | Date | any; } // 定义yup校验规则 const schema = yup.object().shape({ firstName: yup.string().required("First name is required"), // 补充其他字段的校验规则 }); const { register, handleSubmit, control, formState: { errors }, getValues, } = useForm<SampleProps>({ resolver: yupResolver(schema), // 移除泛型<SampleProps> defaultValues: { firstName: "", address: {}, // 补充完整defaultValues,匹配SampleProps类型 contact: "" }, mode: "onChange", });
2. 确保依赖版本兼容
检查package.json中的依赖版本,需满足:
react-hook-form为 v7.x 版本@hookform/resolvers为 v3.x 版本(与react-hook-form v7兼容)
若版本不匹配,执行以下命令更新:
# 更新react-hook-form到最新v7版本 npm install react-hook-form@latest # 更新@hookform/resolvers和yup到兼容版本 npm install @hookform/resolvers@latest yup@latest
3. 验证导入路径
确保从正确路径导入yupResolver,避免误导入其他包的同名函数:
import { yupResolver } from "@hookform/resolvers/yup";
内容的提问来源于stack exchange,提问作者Sudhakar
相关产品推荐
相关产品推荐

