#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. Круто. вы можете принять ответ, если он сработал.