问题描述
//Basicaly all I want to do is say is if region = "Europe" or "other" then the field is required,did go through the formik documentation but not finding anything.
Am also new to formik so dont kNow if this is a nube question or not
<Formik
enableReinitialize={true}
initialValues={{
name: currentBankData.name || '',address: currentBankData.address || '',country: currentBankData.country || '',region: currentBankData.region || '',city: currentBankData.city || '',swiftCode: currentBankData.swiftCode || '',routeCode: currentBankData.routeCode || '',}}
validationSchema={Yup.object().shape({
name: Yup.string().min(3).required('Name is required.'),address: Yup.string().required('Address is required.'),country: Yup.string().required('Country is required.'),region: Yup.string().required('Region is required.'),city: Yup.string().required('City is required.'),swiftCode: Yup.string().when('region',{
is: 'Europe' || 'other,//Would like to do something like this but
doesnt work :)
then: Yup.string()
.required('SwiftCode is required.')
.matches(
/[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
),}),routeCode: Yup.string().when('region',{
is: 'USA',then: Yup.string().required('RouteCode is required.'),verified: Yup.bool(),})}
/ 该数据无误 / 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。 看起来您的帖子大部分是代码;请添加更多详细信息。
解决方法
使用混合器oneOf尝试
validationSchema={Yup.object().shape({
name: Yup.string().min(3).required('Name is required.'),address: Yup.string().required('Address is required.'),country: Yup.string().required('Country is required.'),region: Yup.string().required('Region is required.'),city: Yup.string().required('City is required.'),swiftCode: Yup.string().when('region',{
is: oneOf(['Europe','Europe','other'] as const),then: Yup.string()
.required('SwiftCode is required.')
.matches(
/[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
),}),routeCode: Yup.string().when('region',{
is: 'USA',then: Yup.string().required('RouteCode is required.'),verified: Yup.bool(),})}
,
Finally Works
validationSchema={Yup.object().shape({
name: Yup.string().required('Name is required.'),(region,schema) => {
return ['Europe','other'].includes(region)
? schema
.required('SwiftCode is required.')
.matches(
/[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
)
: schema.matches(
/[A-Z]{6}[A-Z0-9]{2}([A-Z0-9]{3})?/i,'This is not the correct Swift Code'
);
}),verified: Yup.bool()