Formik пытается проверить невидимые поля

Я столкнулся с этой проблемой со схемой проверки Formik. Моя форма имеет 3 формы, которые она принимает, и несколько полей, которые присутствуют в каждой форме, в зависимости от заданного типа параметров и верхнего типа. Проблема заключается в том, что когда я пытаюсь отправить свою форму, если одно из полей ниже не отображается и не имеет значения, функция submitForm не срабатывает. Я установил условную логику как можно лучше, поэтому почему .nullable не разрешает отправку формы?

примеры формы формы:

type === expire => только endDate

type === постоянный => нижний и верхний (в зависимости от upperType) и startDate

и т.п.

Проблема в том, что когда виден только endDate, форма все еще пытается проверить остальные поля формы и то же самое с другими формами формы. Моя логика проверки неверна?

export const validationSchema = (type: string, upperType: RangeType | undefined) => {
  const result = Yup.object({
    lower: Yup.string().when([], {
      is: type !== 'expire',
      then: Yup.string().required(errorMessages.lowerRequired),
      otherwise: Yup.string().nullable(true)
    }),
    upper: Yup.string().when([], {
      is: (type !== 'expire' && (upperType === ASYMMETRICAL || upperType === OUTER)),
      then: Yup.string().required(errorMessages.upperRequired),
      otherwise: Yup.string().nullable(true)
    }),
    startDate: Yup.date()
      .when([], {
        is: type === 'permanent' || type === 'temporary',
        then: Yup.date().nullable(true)
      })
      .max(dateMaxServer(), errorMessages.dateMax),
    endDate: Yup.date().when([], {
      is: type === 'temporary' || type === 'expire',
      then: Yup.date().required(errorMessages.dateRequired),
      otherwise: Yup.date().nullable(true)
    }),
  })
  return result
}


person Haq.H    schedule 01.06.2020    source источник


Ответы (1)


Я думаю, что is ожидает функции, если вы хотите сравнить по-своему.

is: type !== 'expire', //always resolves to **true** if it is used without function

Попробуйте.

Заменять

is: type !== 'expire'

to

is: ()=>type !== 'expire',
person Dipesh KC    schedule 02.06.2020