Reactjs 带有yup验证的对象或字符串类型条件
我在React应用程序中使用Reactjs 带有yup验证的对象或字符串类型条件,reactjs,typescript,validation,formik,yup,Reactjs,Typescript,Validation,Formik,Yup,我在React应用程序中使用yup和Formik来验证TypeScript模型/接口。 我们之前有一个yup.object用于以下模式: export const InputSchema=yup.object({ id:yup.string(), 名称:yup.string().required().min(最小描述长度).max(最大名称长度), 描述:yup.string().required().matches(/(?!^\d+$)^[\s\s]+$/,“请输入有效的描述”).min(最小
yup
和Formik
来验证TypeScript模型/接口。
我们之前有一个yup.object用于以下模式:
export const InputSchema=yup.object({
id:yup.string(),
名称:yup.string().required().min(最小描述长度).max(最大名称长度),
描述:yup.string().required().matches(/(?!^\d+$)^[\s\s]+$/,“请输入有效的描述”).min(最小描述长度).max(最大描述长度),
联系人:yup.string().required()
});
当我们现在更改界面时,名称
和描述
字段可以是字符串
或对象
我仍然想用yup
验证我的表单,所以我尝试使用name:yup.mixed()
和description:yup.mixed()
函数,但现在我发现min.()
和matches()
函数明显存在问题
是否可能存在
字符串
或对象
条件?因此,如果它是一个yup.string()
,那么将使用min/max
,否则只需yup.object()
,我想用一种简单的方法来实现这一点,但找不到任何方法,但他们给出的解决方案是使用
就你的情况来说
Yup.object({
...
name: Yup.lazy(value => {
switch (typeof value) {
case 'object':
return Yup.object(); // schema for object
case 'string':
return Yup.string().min(MIN_DESC_LENGTH).max(_MAX_NAME_LENGTH); // schema for string
default:
return Yup.mixed(); // here you can decide what is the default
}
}),
...
})
另一种方法是这样做。它使用
.addMethod
创建一个自定义方法,该方法接收模式并验证所有模式。非常好的方法我想用一种简单的方法来实现这一点,但找不到任何方法,但他们给出的解决方案是使用
就你的情况来说
Yup.object({
...
name: Yup.lazy(value => {
switch (typeof value) {
case 'object':
return Yup.object(); // schema for object
case 'string':
return Yup.string().min(MIN_DESC_LENGTH).max(_MAX_NAME_LENGTH); // schema for string
default:
return Yup.mixed(); // here you can decide what is the default
}
}),
...
})
另一种方法是这样做。它使用
.addMethod
创建一个自定义方法,该方法接收模式并验证所有模式。很好的方法