如何用 Yup 验证没有重复
How to validate no duplications with Yup
我有一个验证,它只通过检查它们是否违反了它的唯一规则来验证它的字段,但它允许在数组内重复。
我想要某种不允许其中有重复值的条件。
我的对象:
respostas: Yup.array()
.of(
Yup.object().shape({
nome: Yup.string()
.trim()
.max(1000, Messages.RESPOSTA_ENQUETE_TAMANHO_MAXIMO)
.required(Messages.CAMPO_OBRIGATORIO)
})
)
.required(Messages.RESPOSTA_QUANTIDADE_MINIMA)
例如,我会有一个这样的数组:[aaa,bbb,aaa] 允许,但我不想重复。
要验证这一点,您可以编写自己的 .test()
。您可以将以下测试添加到 Yup 对象。
.test("Unique", "Values need te be unique", values => {
return (new Set(values)).size === values.length;
})
错误一般会加在对象上,不会加在特定的字段上。
const { addOrEdit, recordForEdit, fabricTypeList } = props;
const duplicateNameCheck = (list, value) => {
for (var i = 0; i < list.length; i++) {
if (value === list[i].name) {
return false;
} else {
return true;
}
}
};
const validationSchema = yup.object().shape({
name: yup
.string()
.required("Name is required")
.test("Unique", "Name needs te be unique", (values) => {
return duplicateNameCheck(fabricTypeList, values);
}),
});
const formik = useFormik({
initialValues: initialValues,
validationSchema: validationSchema,
onSubmit: (values, { setSubmitting, resetForm }) => {
setSubmitting(true);
addOrEdit(values, resetForm, setSubmitting);
},
});
我有一个验证,它只通过检查它们是否违反了它的唯一规则来验证它的字段,但它允许在数组内重复。
我想要某种不允许其中有重复值的条件。
我的对象:
respostas: Yup.array()
.of(
Yup.object().shape({
nome: Yup.string()
.trim()
.max(1000, Messages.RESPOSTA_ENQUETE_TAMANHO_MAXIMO)
.required(Messages.CAMPO_OBRIGATORIO)
})
)
.required(Messages.RESPOSTA_QUANTIDADE_MINIMA)
例如,我会有一个这样的数组:[aaa,bbb,aaa] 允许,但我不想重复。
要验证这一点,您可以编写自己的 .test()
。您可以将以下测试添加到 Yup 对象。
.test("Unique", "Values need te be unique", values => {
return (new Set(values)).size === values.length;
})
错误一般会加在对象上,不会加在特定的字段上。
const { addOrEdit, recordForEdit, fabricTypeList } = props;
const duplicateNameCheck = (list, value) => {
for (var i = 0; i < list.length; i++) {
if (value === list[i].name) {
return false;
} else {
return true;
}
}
};
const validationSchema = yup.object().shape({
name: yup
.string()
.required("Name is required")
.test("Unique", "Name needs te be unique", (values) => {
return duplicateNameCheck(fabricTypeList, values);
}),
});
const formik = useFormik({
initialValues: initialValues,
validationSchema: validationSchema,
onSubmit: (values, { setSubmitting, resetForm }) => {
setSubmitting(true);
addOrEdit(values, resetForm, setSubmitting);
},
});