Как динамически расширять или составлять схему Yup

#reactjs #validation #formik #yup

#reactjs #проверка #formik #ага

Вопрос:

Скажем, у меня есть Yup.string() для начала.

Затем, в какой-то момент, как в цикле, я хочу эффективно добавить к нему required правило:

Yup.string().required('This field is required') .

И, возможно, затем добавьте некоторые .email проверки.

Я пробовал этот способ, но, похоже, не сработал:

 function validationSchemaConstructor(question) {
  const schema = Yup.string();

  question.validation_rules.forEach(rule => {
    if ("is_required" in rule) {
      schema.required("Hey man nice shot");
    }
  });

  return schema;
}
  

Ответ №1:

Ах, моя ошибка — мне нужно снова назначить schema , потому что цепочка в целом работает, возвращая объект снова:

 function validationSchemaConstructor(question) {
  let schema = Yup.string();

  question.validation_rules.forEach(rule => {
    if ("is_required" in rule) {
      schema = schema.required("Hey man nice shot");  // mistake here!
    }
  });

  // un-comment to test dynamically adding additional rule
  // schema = schema.email("email plesss");

  return schema;
}
  

Хотя не уверен, должен ли я где-то использовать clone() .

Пожалуйста, посоветуйте, есть ли лучший способ 🙂