Ошибка: циклическая зависимость, узел был:"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'])
Другие вопросы по тегам