是的,基于父对象模式的条件验证
Yup conditional validation based on parent object schema
我正在使用 array().of 方法创建 Yup 验证模式,我需要根据外部模式对象的值在该数组中设置一些验证规则。我怎样才能引用该值?
const termsSchema = Yup.object().shape({
termType: Yup.string().when('condition', {
is: true,
then: Yup.string()
.required('Type is required'),
}),
});
const schema = Yup.object().shape({
condition: Yup.boolean()
.required('Error'),
terms: Yup.array().of(termsSchema),
});
很确定您已经找到 solution/workaround。然而,这种方法可能对那些寻求潜在解决方案的人派上用场:
由于您需要嵌套模式的同级字段值,您可以使用 when
创建嵌套模式,例如:
const schema = Yup.object().shape({
condition: Yup.boolean()
.required('Error'),
terms: mixed().when('condition',(value) => {
// use any logic you need to build/modify the returned schema
return array().of(termsSchema)
}),
});
使用 .when 访问嵌套字段是 current limitation 是的,但是这种方法对我有用。我也很好奇你是如何解决这个问题的。
可以使用 when 通过回调函数访问来自 Yup Schema 外部的变量。您可以将任何虚拟字段用作第一个参数,因为目的只是为了触发回调。一旦满足条件,then 之后的验证规则将适用。有关详细信息,请参阅 Yup。
let outside = true
const schema = Yup.object().shape({
dummy:Yup.string(),
terms: Yup.array().of(termsSchema).when("dummy", {
is: (value) =>
outside === true,
then: Yup.number().required("Please provide info")
}),
});
我正在使用 array().of 方法创建 Yup 验证模式,我需要根据外部模式对象的值在该数组中设置一些验证规则。我怎样才能引用该值?
const termsSchema = Yup.object().shape({
termType: Yup.string().when('condition', {
is: true,
then: Yup.string()
.required('Type is required'),
}),
});
const schema = Yup.object().shape({
condition: Yup.boolean()
.required('Error'),
terms: Yup.array().of(termsSchema),
});
很确定您已经找到 solution/workaround。然而,这种方法可能对那些寻求潜在解决方案的人派上用场:
由于您需要嵌套模式的同级字段值,您可以使用 when
创建嵌套模式,例如:
const schema = Yup.object().shape({
condition: Yup.boolean()
.required('Error'),
terms: mixed().when('condition',(value) => {
// use any logic you need to build/modify the returned schema
return array().of(termsSchema)
}),
});
使用 .when 访问嵌套字段是 current limitation 是的,但是这种方法对我有用。我也很好奇你是如何解决这个问题的。
可以使用 when 通过回调函数访问来自 Yup Schema 外部的变量。您可以将任何虚拟字段用作第一个参数,因为目的只是为了触发回调。一旦满足条件,then 之后的验证规则将适用。有关详细信息,请参阅 Yup。
let outside = true
const schema = Yup.object().shape({
dummy:Yup.string(),
terms: Yup.array().of(termsSchema).when("dummy", {
is: (value) =>
outside === true,
then: Yup.number().required("Please provide info")
}),
});