Reactjs 使用YUP验证文件存在性

Reactjs 使用YUP验证文件存在性,reactjs,formik,yup,Reactjs,Formik,Yup,我正在使用验证我的表单。在我的一个表单中,我想验证一个是否有一个文件 我已经对此进行了测试(但不起作用): 我在控制台中收到以下错误消息: 文件必须是对象类型,但最终值为:null(强制转换 从值{})。如果“null”是空值,请确保 将架构标记为.nullable() 有什么想法吗?我知道这是一个老问题,但我遇到了同样的问题,并追踪了发生的事情 当验证程序运行时,它首先测试字段类型是否匹配。在这种情况下,它会检查它是否是一个对象。由于它不是,并且字段未标记为可为空,因此验证失败,并出现类型错误

我正在使用验证我的表单。在我的一个表单中,我想验证一个
是否有一个文件

我已经对此进行了测试(但不起作用):

我在控制台中收到以下错误消息:

文件必须是
对象
类型,但最终值为:
null
(强制转换 从值
{}
)。如果“null”是空值,请确保 将架构标记为
.nullable()


有什么想法吗?

我知道这是一个老问题,但我遇到了同样的问题,并追踪了发生的事情

当验证程序运行时,它首先测试字段类型是否匹配。在这种情况下,它会检查它是否是一个对象。由于它不是,并且字段未标记为可为空,因此验证失败,并出现类型错误。是的,由于提前退出,所以永远不会运行
required()

那么,当类型不匹配并且您不想使用
nullable()
方法时,我们如何调整显示的消息?我查看了源代码,发现消息是生成的。所以它是locale对象的一部分。因此,我们可以这样解决它

import * as Yup from 'yup';
import { setLocale } from 'yup';

setLocale({
  mixed: {
    notType: '${path} is required',
  }
})

Yup.object().shape({
  file: Yup.object().shape({
  name: Yup.string().required()
}).label('File')
现在,当类型不正确时,将显示新消息。
label()
方法允许您为字段设置一个好的显示名称,因为消息将在验证器中的任何无效类型情况下使用

另一种选择是专门为此字段编写自定义验证器,但在这种情况下,这似乎有些过分。

下面是我的做法

从“yup”导入{object,string,mixed}
const schema=object().shape({
附件:mixed().test(“文件大小”,“文件太大”,(值)=>{
如果(!value.length)返回true//附件是可选的

返回值[0]。用于将来PEEP的大小,此问题解释如下:
import * as Yup from 'yup';
import { setLocale } from 'yup';

setLocale({
  mixed: {
    notType: '${path} is required',
  }
})

Yup.object().shape({
  file: Yup.object().shape({
  name: Yup.string().required()
}).label('File')