使用 React-Hook-Form 和 Yup 验证文件(<x> 必须是 `object` 类型,但最终值为:`null`)
Validating File using React-Hook-Form and Yup (<x> must be a `object` type, but the final value was: `null`)
我正在使用 react-hook-form 制作一个简单的文件上传表单,我需要验证是否已选择要上传的文件。使用 yup 进行验证。我意识到关于这个主题还有其他问题,但我找不到可行的解决方案。
我的文件上传组件基于(几乎 100% 相同)这个答案。它似乎工作得很好,如果我禁用验证文件正确上传。
我遇到的问题是在验证是否已选择文件时
我收到错误 file must be a 'object' type, but the final value was: 'null'
.
这里 CodeSandbox 显示了问题。我添加了一些打印件,显示“文件”形式的内容 属性 及其类型(显示为对象)
使用下面的模式验证,它应该按预期工作。
const fileFormSchema = yup.object().shape({
file: mixed()
.test("required", "You need to provide a file", (file) => {
// return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
if (file) return true;
return false;
})
.test("fileSize", "The file is too large", (file) => {
//if u want to allow only certain file sizes
return file && file.size <= 2000000;
})
});
我正在使用 react-hook-form 制作一个简单的文件上传表单,我需要验证是否已选择要上传的文件。使用 yup 进行验证。我意识到关于这个主题还有其他问题,但我找不到可行的解决方案。
我的文件上传组件基于(几乎 100% 相同)这个答案。它似乎工作得很好,如果我禁用验证文件正确上传。
我遇到的问题是在验证是否已选择文件时
我收到错误 file must be a 'object' type, but the final value was: 'null'
.
这里 CodeSandbox 显示了问题。我添加了一些打印件,显示“文件”形式的内容 属性 及其类型(显示为对象)
使用下面的模式验证,它应该按预期工作。
const fileFormSchema = yup.object().shape({
file: mixed()
.test("required", "You need to provide a file", (file) => {
// return file && file.size <-- u can use this if you don't want to allow empty files to be uploaded;
if (file) return true;
return false;
})
.test("fileSize", "The file is too large", (file) => {
//if u want to allow only certain file sizes
return file && file.size <= 2000000;
})
});