Да, условная проверка

#javascript #reactjs #typescript #formik #yup

Вопрос:

Я хочу проверить одно поле на основе другого, используя мою схему. Например, если тип карты «внедорожник», максимальное количество «noOfPassengers» должно быть 6 или 4. Но это не подтверждает этот случай, ни я не могу отладить это, ни получить какую-либо ошибку в консоли.

 const validationSchema = yup.object().shape({
    location: yup
        .string()
        .required('location is required'),
    destination: yup
        .string()
        .required('Destination is required'),
    carType: yup
        .string(),
    noOfPassengers: yup
        .string()
        .when('carType', {
            is: value => value amp;amp; value === "SUV",
            then: yup
                .string()
                .max(6, 'Max 6 passengers are required'),
            otherwise: yup
                .string()
                .max(4, 'Max 4 passengers are required'),
        }),
});
 

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

1. можете ли вы поделиться своим кодом формы ?

2. Вы пробовали просто is: 'SUV' ?

Ответ №1:

Вы сравниваете значения noOfPassengers как строку, в то время как это должно быть число примерно так:

 Yup.object().shape({
  location: Yup
      .string()
      .required('location is required'),
  destination: Yup
      .string()
      .required('Destination is required'),
  carType: Yup
      .string(),
  noOfPassengers: Yup
      .number()
      .when('carType', {
          is: value => value amp;amp; value === "SUV",
          then: Yup
              .number()
              .max(6, 'Max 6 passengers are required'),
          otherwise: Yup
              .number()
              .max(4, 'Max 4 passengers are required'),
      }),
});
 

Если вы запустите это, вы должны получить ошибку проверки. У вас также есть недостаток в логическом состоянии. Вы тоже должны это исправить, но это не входит в рамки этого ответа.

Проблема в том, что

Yup.string() должно быть Yup.number() , потому, что вы затем сравниваете это max .

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

1. Понял свою ошибку, это сработало на меня. Спасибо!

2. Круто. вы можете принять ответ, если он сработал.