Reactjs Yup验证模式对象条件验证
我想说,如果type=1,那么验证成员身份对象,确实使用.when()进行了尝试,但必须使用对象的每个部分进行验证(仅当type=1时,才进行验证)Reactjs Yup验证模式对象条件验证,reactjs,validation,conditional-statements,formik,yup,Reactjs,Validation,Conditional Statements,Formik,Yup,我想说,如果type=1,那么验证成员身份对象,确实使用.when()进行了尝试,但必须使用对象的每个部分进行验证(仅当type=1时,才进行验证) validationSchema={Yup.object().shape({ //General name: Yup.string().min(3).required('Name is required.'),
validationSchema={Yup.object().shape({
//General
name: Yup.string().min(3).required('Name is required.'),
email: Yup.string().email().required('Email is required.'),
contactNo: Yup.number().required('Number is required.'),
address: Yup.string().required('Address is required.'),
country: Yup.string().required('Country is required.'),
memberShip: Yup.object()
.shape({
//Something like this
if(type ===1){
memberShipNo: Yup.string().required('MemberShip Number is required.'),
memberShipStart: Yup.string().required( 'MemberShip Number is required.'),
fee: Yup.string().required('MemberShip Number is required.')},
}),
verified: Yup.bool(),
})}
处理呈现条件字段问题的一种方法是使用三元和扩展。此解决方案确实需要少量的重复代码,但可能还有其他(更好的)方法,这取决于您是否需要更好的解决方案 在本例中,如果
类型===1
,则所有字段都是必需的
,否则不是必需的,而是可选的
memberShip: Yup.object()
.shape({
...(type === 1 ? {
memberShipNo: Yup.string().required('MemberShip Number is required.'),
memberShipStart: Yup.string().required('MemberShip Number is required.'),
fee: Yup.string().required('MemberShip Number is required.')
} : {
memberShipNo: Yup.string(),
memberShipStart: Yup.string(),
fee: Yup.string()
}),
}),
你的问题不太清楚,但你说了
type=1
,但我在你的模式中没有看到type
字段。我想你需要基于某些其他字段选择的条件验证,请澄清。他做了一些编辑,希望这有帮助。类型验证是一个正在获取的道具,因此type
是一个你需要的道具iringmembership
object否则是可选的?是的,因此如果type=2或其他东西不验证objectI,则会不断收到错误解析错误:意外标记,应为“,”@chrisjnportgieter修复了它