Formik & Yup - Как создать схему для массива и строки - PullRequest
0 голосов
/ 29 октября 2019

Я использую Formik для создания формы библиотеки книг, где каждый элемент в списке будет выглядеть так:

author: {
 name: 'string',
 titles: ['string']
}

У меня возникли проблемы при попытке создать схему с Yup дляпроверить эти поля. У меня есть:

schema = Yup.object().shape({
 author: Yup.object().shape({
  name: Yup.string().min().max().required('...')
 }),
 author: Yup.array().of(
  Yup.object().shape({
   titles: Yup.string().min().max().required('...')
  })
 )
});

Начальные значения также:

{
 author: {name: ''},
 author: [{ titles: '' }]
}

Моя проверка работает для массива, но не для имени. Я предполагаю, что проблема заключается в том, что я не могу иметь одинаковое имя для обоих элементов в объекте, однако я не знаю, как объединить два поля как в начальных значениях, так и в схеме. Я просмотрел API Yup и заметил, что у них mixed(), но я не понимал, как реализовать то, что мне нужно. Возможен ли этот способ или будет ли возможна проверка обоих?

1 Ответ

1 голос
/ 29 октября 2019

Author - это не массив, это объект, который содержит массив и строку. Кроме того, вы определяете его дважды:

schema = Yup.object().shape({
 author: Yup.object().shape({
  name: Yup.string().min().max().required('...'),
  titles: Yup.arrayOf(Yup.string())
 }),
});

Не знаете, почему у вас есть 2 авторских ключа. Схема выше соответствует:

{
  author: {
    name: "hehyryg",
    titles: ["title", "title2"]
  }
}
...