Я создал некоторую схему регистрации
export const registrationSchema = (translate) => Yup.object().shape({
//... other properties that are validated.
// for example username
username: Yup.string()
.min(6, translate('validation:common.username.min', { min: 6 }))
.max(20, translate('validation:common.username.max', { max: 20 }))
.required(translate('validation:common.username.required')),
DOB: Yup.lazy(value => {
console.info('yup', value);
if (moment().diff(moment(value), 'years') < 18)
// Here return DOB error somehow
})
...
и до сих пор это работает как шарм. Но теперь мне нужно проверить, не старше ли пользователя 18 лет. Я получаю DateOfBirth из средства выбора даты, и я могу проверить, меньше ли оно 18 с моментом.
if (moment().diff(moment(date),'years) < 18)
и это значение даты, которое я получил при использовании Yup.lazy, но не знаю, как выдать ошибку проверки, если младше 18 лет, чтобы отобразить ее в поле DOB. я даже не знаю, использую ли я правильный метод yup. Я хотел использовать yup.date(). но как получить выбранную дату внутри схемы, чтобы проверить, является ли она допустимым возрастом.





Вы можете использовать Yup.string следующим образом:
Yup.string().test(
"DOB",
"error message",
value => {
return moment().diff(moment(value),'years') >= 18;
}
)
если тестовая функция возвращает true, поля проходят проверку. В противном случае устанавливается ошибка.
Спасибо друг. Я пробовал с .test(), но использовал его совершенно неправильно :) Это работает как шарм. Спасибо
Кроме того, если вы используете обычный function(value) { ... } в 3-м параметре (вместо функции стрелки), у вас есть доступ к специальному контексту this, который позволяет вам делать такие вещи, как возврат пользовательского сообщения об ошибке: return this.createError({ message: 'Your custom message' }); для ситуаций, когда у вас может быть другая ошибка сообщения в зависимости от значения.
Yup.string()
.required("DOB is Required")
.test(
"DOB",
"Please choose a valid date of birth",
(date) => moment().diff(moment(date), "years") >= 18
)
не могли бы вы объяснить, пожалуйста, что означает
lazyв YUP, я не могу понять это из документов..