У меня возникла проблема с Joi, которую я изо всех сил пытался решить, и я использовал массу другого синтаксиса, чтобы попытаться решить ее.
В основном у нас есть две схемы ниже. Скажем, в раскрывающемся списке есть 5 вариантов. Если в массиве есть только один элемент, требуется только arraySchemaOne, а если в нем более одного элемента, то требуются как первая, так и вторая схемы.
const arraySchemaOne = Joi.object({
dropdown: Joi.string().valid('Option 1')
}).required();
const arraySchemaTwo = Joi.object({
dropdown: Joi.string().valid('Option 2')
}).required();
this.validationPattern = Joi.object().pattern(/\w/, Joi.object(
{
rows: Joi.ref('rows.length >= 2')
?
Joi.array().items([arraySchemaOne, arraySchemaTwo])
:
Joi.array().items([arraySchemaOne])
}
));
Если у кого-то есть синтаксис, который может помочь в решении этой проблемы, было бы здорово. Я пробовал много вещей за последние несколько дней и не смог решить эту проблему.
Joi был представлен другим инженером, и во всех остальных случаях он отлично работал для наших схем данных. В основном у меня есть массив объектов. Когда в массиве находится только один элемент, значение раскрывающегося списка должно быть вариантом 1, когда два элемента находятся в значении одного, должно быть значение 1, а значение другого должно быть вариантом 2. Если элементов больше двух, скажем, 5 элементы, один из них должен иметь значение с опцией 1, а другой должен иметь опцию 1, но остальные 3 могут быть любыми.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


@ katherineGG28 katherineGG28, возможно, вы захотите изучить следующую документацию, API joi предоставляет метод when, в котором вы можете передать ссылку, которая у вас уже есть, в качестве первого параметра, а затем заполнить параметры своими альтернативными схемами. С другой стороны, если другой инженер представил библиотеку, вы должны хотя бы проверить файл README в репозитории, в котором четко указано, что эта библиотека не была разработана с учетом браузеров.
https://github.com/hapijs/joi/blob/v14.3.1/API.md#anywhenусловные-опции
да, я думаю, это происходит, когда вы не добираетесь до конца страницы, хотя реализация, которую вы хотите, покрывается предоставленным API. github.com/hapijs/joi#browsers
Я не думаю, что переход на Yup приведет к автоматическому раскрытию этого дела. Проблема заключается в том, что это не простой способ проверки массива объектов на основе того, является ли длина массива определенным числом. Вопрос был не в том, какой API проверки использовать, а в том, как справиться с определенным случаем проверки.
Привет, @KatherineGG28, есть ли причина, по которой ты используешь Joi для интерфейса? Joi не очень хорош для проверки браузера, Yup — это альтернатива браузеру с похожим API. Кроме того, не могли бы вы объяснить, чего вы пытаетесь достичь с точки зрения данных, а не схем?