微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从错误中获取无效的 yup 项目的索引

如何解决从错误中获取无效的 yup 项目的索引

我目前正在使用 Formik 和 Yup 处理一个包含 700 多个复杂条目的表单。我想准确打印受影响的项目。例如:如果项目 #548 无效,我想获取项目索引(应该是 547),然后将其打印给用户

我尝试在 Yup 中使用 ${path} 插值,这几乎可以满足我的要求,但我只想获取索引或能够在输出离开 Yup 之前对其进行转换(或者我会必须修改其他组件,我不希望它感觉像黑客)。

这是我的架构:

const toGradeSchema = yup.lazy((_toGrade: any) => {
  const toGrade = _toGrade as ToGradeInput | undefined;
  const isGradeSet = toGrade?.gradeId || toGrade?.section;
  const gradeId = yup
    .string()
    .test('gradeId','Debe de colocar el grado',(val?: any) => {
      return (!isGradeSet && !val) || (val && isGradeSet);
    });
  const section = yup
    .string()
    .oneOf(sectionList)
    .test('gradeId','Debe de colocar la sección',(val?: any) => {
      return (!isGradeSet && !val) || (val && isGradeSet);
    });
  const base = yup.object().shape({
    gradeId,section,});

  return base;
});

const newStudentsSchema = yup.array().of(
  yup
    .object()
    .shape({
      name: yup.object().shape({
        firstName: yup
          .string()
          .required('El primer nombre es requerido ${path}'),lastName: yup.string().required('El apellido es requerido'),fullName: yup.string().notrequired(),}),email: yup
        .string()
        .email('El correo electrónico es inválido')
        .required('Debe de colocar un correo electrónico ${path}'),password: yup
        .string()
        .required(() => 'Debe de colocar una contraseña ${path}')
        .test(
          'password is valid','La contraseña debe de contener por lo menos una letra en mayúscula,una en minúscula y al menos un dígito',(pass: string | undefined | null) => {
            if (!pass) {
              return false;
            }
            return validatePassword(pass);
          },),gender: yup.mixed().oneOf(genderValues),// The order in the attendance that must not change
      birthDate: yup.date().notrequired(),allergies: yup.string().notrequired(),diseases: yup.string().notrequired(),toGrade: toGradeSchema,})
    .notrequired(),);

const existingStudentSchema = yup.array().of(
  yup.object().shape({
    studentId: yup.string().required('Debe de colocar el ID del estudiante'),);

export const bulkStudentCreateSchema = yup.object().shape({
  students: yup.object().shape({
    newStudents: newStudentsSchema,existingStudents: existingStudentSchema,});

有什么想法吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?