我有一个对象,其标志为boolean,另一项为对象数组。
仅当标志为true时,我才想检查对象数组。
所以:
{
shouldCheck: false
}
这应该通过
{
shouldCheck: true
}
这应该打破
{
shouldCheck: true,
rules: []
}
这应该打破
{
shouldCheck: true,
rules: [1]
}
这应该打破
{
shouldCheck: true,
rules: [{other: 'xx'}]
}
这应该打破
{
shouldCheck: true,
rules: [right: 'one']
}
这应该通过
yup模式:
const delaySchema = yup.object().shape({
shouldCheck: yup.boolean(),
rules: yup.mixed()
.when(['shouldCheck'], {
is: (sck) => {
return sck;
},
then: yup.array().of(yup.object().shape({
right: yup.string().required(),
})),
otherwise: yup.mixed().nullable()
}),
});
现在这里的问题是它忽略了内部值并且不检查它们。
答案 0 :(得分:1)
尝试在条件前使用yup。 array()
const delaySchema = yup.object().shape({
shouldCheck: yup.boolean(),
rules: yup.array()
.when(['shouldCheck'], {
is: (sck) => {
return sck;
},
then: yup.array().of(yup.object().shape({
right: yup.string().required(),
})),
otherwise: yup.mixed().nullable()
}),
});