Почему проверка строки Yup не выдает ошибку, когда это объект? - PullRequest
0 голосов
/ 13 мая 2019

Я сделал пример , чтобы показать, что происходит (я раздвоил первый поиск в Google "formik example").

Я использую react-select, и он сохраняет в состоянии объект со свойствами value и label.

Я проверяю форму Formik с помощью Yup.string().required(), но она не показывает никаких ошибок. Почему он не показывает никаких ошибок? Это намеренно или это ошибка? Как это исправить?

1 Ответ

1 голос
/ 14 мая 2019

Согласно документации Yup:

По умолчанию логика преобразования строки заключается в вызове toString для значения, если оно существует. пустые значения не приводятся (используйте sure () для приведения пустых значений к пустым строкам).

Другими словами, он вызывает toString() для результата выбора, который будет "[object Object]" (т.е. это строка). Вы можете исправить это, используя strict() ( документация здесь ):

validationSchema={Yup.object().shape({
  select: Yup.string()
    .strict(true)
    .required(" select Required")
})}

Конечно, тогда ваш выбранный ввод не пройдет проверку, поэтому вам нужно изменить его на что-то вроде этого:

<Select
  options={options}
  value={options.find(({ label }) => label === values.select)}
  onChange={value => setFieldValue("select", value.label)}
  onBlur={() => setFieldTouched("select")}
/>
...