问题描述
我目前正在使用 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 (将#修改为@)