使用 Yup 的 react-hook-form 解析器类型错误

Posted

技术标签:

【中文标题】使用 Yup 的 react-hook-form 解析器类型错误【英文标题】:react-hook-form resolver type error using Yup 【发布时间】:2021-11-15 04:37:37 【问题描述】:

我正在创建一个身份验证表单,我正在参考 react-hook-form docs 关于如何使用 yup 来验证我的输入。据我所知,一切都与文档中提供的实现几乎相同。但是,我在useForm 解析器上遇到了错误(如下所示)。知道我哪里出错了吗?

"react-hook-form": "^7.15.2" "yup": "^0.32.9" "@hookform/resolvers": "^2.8.1"

错误

代码

interface IFormInputs 
  email: string;
  password: string;
  passwordConfirm: string;


const schema = yup.object().shape(
  email: yup.string().required(),
  password: yup.string().required(),
  passwordConfirm: yup.string().required(),
);

const SignUp = (): JSX.Element => 
  const 
    control,
    handleSubmit,
    getValues,
    formState:  errors ,
   = useForm<IFormInputs>( resolver: yupResolver(schema) );

  const onSubmit: SubmitHandler<IFormInputs> = () => 
    const values = getValues();
    console.log('values', values);
  ;

  return (
    <div>
      <StyledPaper>
        <StyledTypography>Sign Up</StyledTypography>
        <form onSubmit=handleSubmit(onSubmit)>
          <Controller
            name="email"
            rules= required: 'this field is required' 
            defaultValue=""
            control=control
            render=( field ) => (
              <TextField
                fullWidth
                label="Email"
                variant="filled"
                value=field.value
                error=!!errors.email
                helperText="Provide an email"
                ...field
              />
            )
          />
          <StyledButton type="submit">Submit</StyledButton>
        </form>
      </StyledPaper>
      <div>
        <StyledTypography>Already have an account? Log in.</StyledTypography>
      </div>
    </div>
  );
;

export default SignUp;

【问题讨论】:

【参考方案1】:

这看起来像一个库错误,将 @hookform/resolvers 降级到 2.8.0 似乎可以解决问题。

编辑:您可以通过强制yubResolver 使用yub.AnyObjectSchema 泛型来消除版本2.8.1 上的错误。感谢 Mihai-github 解决这个问题。

useForm<IFormInputs>(
  resolver: yupResolver<yup.AnyObjectSchema>(schema),
);

【讨论】:

Attempted import error: 'AnyObjectSchema' is not exported from 'yup' (imported as 'yup') 显示此错误,该怎么办? @Nearhuscarl @ShubhamSinghvi 你用的是什么yup/resolver版本? @hookform/resolvers@2.8.4 yup@0.32.11 react-hook-form@7.20.5 是。

以上是关于使用 Yup 的 react-hook-form 解析器类型错误的主要内容,如果未能解决你的问题,请参考以下文章

react-hook-form:使用 onBlur 模式时验证不起作用

关闭表单时从 react-hook-form 重置值

如何使用 React-Hook-Form 设置焦点

使用 Yup 和 Formik 自动修剪空白

使用 React-Hook-Form 和 YupResolver 时遇到此错误:尝试导入错误:“set”未从“react-hook-form”导出(导入为“o”)

react-hook-form使用