Условная проверка объекта схемы проверки Yup

#reactjs #validation #conditional-statements #formik #yup

#reactjs #проверка #условные операторы #formik #да

Вопрос:

Я хочу просто сказать, что если type = 1 затем проверяет объект членства, попробовал его.когда () но должен был сделать это с каждым объектом (только когда type =1 затем проверяет

  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. Не совсем понятно по вашему вопросу, но вы сказали type=1 , но я не вижу type поля в вашей схеме. Я думаю, вы хотите условную проверку на основе выбора определенного другого поля, пожалуйста, уточните

2. Привет, внес некоторые изменения, надеюсь, это поможет

3. проверка типа — это реквизит, который я получаю

4. итак type , является ли реквизит, на основе которого вам требуется membership объект, в противном случае необязательным?

5. Да, поэтому, если type = 2 или что-то в этом роде, не проверяйте объект

Ответ №1:

Один из способов решить вашу проблему с отображением условного поля — использовать троичный и расширяющийся. Это решение требует небольшого количества повторяющегося кода, и могут быть другие (лучшие) способы, хотя вам решать продолжать расследование, если вы хотите лучшего решения.

В этом примере, если type === 1 тогда все поля required еще не обязательны, но необязательны.

  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()
    }),
  }),
  

Комментарии:

1. Я продолжаю получать ошибки Ошибка синтаксического анализа: неожиданный токен, ожидаемый «,»

2. @ChrisJnrPotgieter исправил это