Как я могу сделать так, чтобы число yup принимало значения, допускающие значение NULL? - PullRequest
1 голос
/ 03 августа 2020

У меня есть следующая проверка:

nrOfApples: yup.number().min(0).max(999),

И прямо сейчас, если я оставлю поле пустым, оно будет признано ложным. Есть ли способ заставить yup.number () принимать пустые значения? Я пробовал:

yup.number().nullable()

Но похоже, что это не работает. Есть идеи, как это сделать?

1 Ответ

1 голос
/ 03 августа 2020

Вы должны передать true в обнуляемое значение -

nrOfApples: yup.number().min(0).map(999).nullable(true);

From: https://github.com/jquense/yup/issues/500

Рабочий пример: https://runkit.com/xdumaine/5f2816c75a0ba5001aa312b2

Обратите внимание, что если вы добавите required().nullable(true), required переопределит nullable, и null не будет проверяться.

Обновление:

Вы можете использовать transform, чтобы преобразовать значение NaN в null. Я обновил runkit вот таким:

const contactSchema = yup.object({
  name: yup.string()
    .required(),
  nrOfApples: yup
    .number()
    .min(0)
    .max(999)
    .nullable(true)
    // checking self-equality works for NaN, transforming it to null
    .transform((_, val) => val === val ? val : null) 
})
...