Ошибка: циклическая зависимость, узел был:"dateA"
Мне нужна информация о наилучшей реализации для такого сценария: у меня есть выбор и два выбора даты. Когда я выбираю из select (idRisk) параметр PRESENT, две даты должны быть обязательными. Если DateA предшествует DateB, то в форме я хочу показать ошибку проверки. Каков наилучший способ достичь этого? Я пишу это для завершения, но показать эту ошибку = Ошибка: циклическая зависимость, узел был:"dateA"
validationSchema: Yup.object({
idRisk: Yup.number().required(),
dateB: Yup.mixed().when("idRisk", {
is: Risk.PRESENT,
then: Yup.mixed().required(),
otherwise: Yup.mixed()
}),
dateA: Yup.mixed().when("idRisk", {
is: Risk.PRESENT,
then: Yup.mixed().required(),
otherwise: Yup.mixed()
})
.when(["dateA", "dateB"],
(dateA, dateB) => {
if (dateA.isBefore(dateB))
return this.required();
}
)
})
2 ответа
Вы не можете ссылаться на параметр ["dateA"]
внутри dateA:Yup.mixed().when()
рассмотрите возможность использования другого подхода, например:
dateA: Yup.mixed()
.when(["dateB"],
(dateB, schema, node) => {
if (node.value.isBefore(dateB))
return this.required();
}
)
вы можете получить значение dateA из node.value
Вам нужно добавить циклическую зависимость в конце, вот так:
validationSchema: Yup.object({
idRisk: Yup.number().required(),
dateB: Yup.mixed().when('idRisk', {
is: Risk.PRESENT,
then: Yup.mixed().required(),
otherwise: Yup.mixed()
}),
dateA: Yup.mixed()
.when('idRisk', {
is: Risk.PRESENT,
then: Yup.mixed().required(),
otherwise: Yup.mixed()
})
.when(['dateA', 'dateB'], (dateA, dateB) => {
if (dateA.isBefore(dateB)) return this.required()
})}, ['dateA'])