Yup.when: `NaN` (преобразование из значения `NaN`)

Я пытаюсь реализовать довольно простую проверку поля/выбора формы. Схема проверки:

vehicleProvider: Yup.object() // This is an object which is null by default
    .required('formvalidation.required.message')
    .nullable(), 
reserveVehicle: Yup.number().when('vehicleProvider', { // This is a number which is null by default
    is: provider => provider?.hasReserve,
    then: Yup.number()
        .required('formvalidation.required.message')
        .nullable(),
    otherwise: Yup.number().notRequired()
}),

Что я хочу сделать: требовать/проверять только reserveVehicle, если provider.hasReserve равно true. В противном случае не требуйте номер. Я получаю эту ошибку:

«reserveVehicle должен быть типа number, но окончательное значение было: NaN (преобразовано из значения NaN)».

Это имеет смысл (отчасти), потому что null — это не число. Но поскольку я пытаюсь сказать ему, что это не должно требоваться, на мой взгляд, он не должен пытаться его оценивать.

Я пропустил какие-либо ключевые концепции Yup?


person sandrooco    schedule 08.11.2019    source источник
comment
Я думаю, что ваш otherwise может быть причиной ваших проблем, попробуйте добавить .nullable() к этому.   -  person Thismatters    schedule 27.12.2019


Ответы (2)


Вы должны использовать typeError

Вот пример из моего кода:

amount: Yup.number()
                    .typeError('Amount must be a number')
                    .required("Please provide plan cost.")
                    .min(0, "Too little")
                    .max(5000, 'Very costly!')
person Gaurav    schedule 06.01.2020
comment
Теперь я просто установил typeError (''), поэтому в моем приложении не отображается нежелательная ошибка. - person Thomas; 26.07.2021

Поскольку вы хотите, чтобы поле по-прежнему проверялось, когда значение равно NaN, и это не обязательное поле, изменение вашего otherwise на это должно исправить это:

otherwise: Yup.number().notRequired().nullable()

Добавление .nullable() в конце является ключом.

person storm143    schedule 12.04.2021