下面是我的验证模式:
const validationSchema = Yup.object().shape({
person: Yup.object().shape({
name: Yup.string().required('Field is required'),
surname: Yup.string().required('Field is required'),
middleName: Yup.string().required('Field is required'),
email: Yup.string()
.email('Wrong e-mail format')
.required('Field is required')
}),
company: Yup.object().shape({
name: Yup.string().required('Field is required'),
address: Yup.string().required('Field is required'),
email: Yup.string()
.email('Wrong e-mail format')
.required('Field is required')
})
});
React状态中还有两个变量:isPerson
和isCompany
,如何使校验有条件地工作,例如如果isPerson
为真,则需要对validationSchema
中的person
进行校验?
5条答案
按热度按时间sqyvllje1#
更新答复:2023.
你可以用Yup条件
并确保相应地更新你的表格。我希望你明白这一点...
uqjltbpv2#
您可以像任何其他对象一样有条件地添加到验证方案中:
ssgvzors3#
* YUP条件性确认 *:
当**时,**可以做的各种验证如下:
1.单值,简单条件:
规则:* 仅当isPerson为true时才请求personName。*
2.单值,复杂条件:
规则:* 当company是“IT”时,仅要求输入personName。*
3.多值、复杂条件:
规则:* 仅当company为“IT”且person有效时才要求提供personName。*
enxuqcxy4#
虽然这个公认的解决方案是可行的,但它有一个问题--需要验证的字段中有两个是公共的,必须重复。在我的例子中,我的大多数字段都是公共的,只有2-4个异常值。
这里有另一个解决方案:
1.分别定义每个模式-即3个模式- commonSchema用于公共字段,personSchema用于个人特定字段,companySchema用于公司特定字段。
1.根据状态合并方案
有关“concat”的详细信息,请参阅github上的yup文档。
ffx8fchx5#
也可以使用多个字段进行验证。