使用 yup 和 React Hook 表单处理文件验证

Handle File Validation Using Yup and React Hook Form

提问人:Rasil 提问时间:10/31/2023 最后编辑:Ken WhiteRasil 更新时间:10/31/2023 访问量:36

问:

所以,基本上,我有一个表格,我有作为字段之一。我希望此字段为必填项。<input type="file" />

const { register, handleSubmit } = useForm({
  defaultValues,
  resolver: yupResolver(schema),
});

<form onSubmit={handleSubmit(onSubmit)}>
  <input type="text" {...register("fullname")} />
  <input type="file" {...register("image")} />
</form>

我已使用yup进行验证模式:

const schema = yup.object().shape({
  fullname: yup.string().required("Name is required"),
  image: yup.mixed().required("Image is required"),
})

而且,我的 defaultValues 为:

const defaultValues: {
  name: string,
  image: File | null,
} = {
  name: "",
  image: null,
}

如果我这样做,我会收到一个错误,说

参数“values”和“values”的类型不兼容。

我认为原因是架构不允许图像为 null,而在 defaultValues 中,我最初将图像字段设置为 null。但是,如果我将图像字段设置为可为 null,则验证将不起作用,因为这意味着文件可以为空,但我不希望它在字段为空时抛出错误。

我该如何解决这个问题?

reactjs typescript 验证 react-hook-form 是的

评论


答:

0赞 Prashant Shah 10/31/2023 #1

该文件将有一个文件对象数组,因此您需要将图像类型设置为 File[],或者默认值为空数组,为了进行验证,您可以对空数组进行检查。

FYR,您可以在此处检查正确的图像类型