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')