Проверка полей условно на основе другого поля в Yup и Formik

#reactjs #formik #yup

#reactjs #formik #да

Вопрос:

У меня проблема с проверкой. Я хотел, чтобы, если access значение равно 1, вы могли выбрать start_date и end_date , но если значение access не равно 1, тогда вы можете выбрать только сегодня.

Codesandbox

Редактировать 63973773/ ошибка при настройке ввода в reactjs-метка перезаписывает значение (разветвлено)

 export const validationSchema = yup.object().shape({
  access: yup.number().nullable(),
  start_date: yup.string().required('Select start date'),
  end_date: yup.string().required('Select end date'),
});
  

Ответ №1:

Вместо проверки строк вы можете использовать проверку даты, просто убедитесь, что задали правильный обмен сообщениями!:

 import moment from "moment";
...
const today = new Date().toDateString();
const validationSchema = yup.object().shape({
  access: yup.number().nullable(),
  start_date: yup.date()
    .typeError("Invalid date")
    .required("Select start date")
    .when("access", {
      is: 1,
      otherwise: (d) => d.min(today, "Should be today's date")
          .max(today, "Should be today's date")
    }),
  end_date: yup.date()
    .typeError("Invalid date")
    .required("Select end date")
    .when("access", {
      is: 1,
      otherwise: (d) => d.min(today, "Should be today's date")
          .max(today, "Should be today's date")
    })
});
  

Обновление stackblitz можно найти здесь .

Комментарии:

1. Когда доступ равен 1, вы можете выбрать любую дату. Но когда значение access НЕ РАВНО 1, вы можете выбрать только сегодня. и, кстати, пожалуйста, используйте date-fns. Я опубликовал свой codesandbox в своем вопросе. Спасибо