如何解决从错误中获取无效的 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 举报,一经查实,本站将立刻删除。