如何仅验证 Yup 模式的一部分?

Mar*_*ury 3 javascript validation reactjs yup

考虑到我们在 React 中有以下定义的模式:

const InsertSchema = Yup.object().shape({
    category: Yup.string()
        .required("Category is required."),
    usage: Yup.number()
        .required("Usage is required."),
});
Run Code Online (Sandbox Code Playgroud)

假设我想在给定的表单中仅验证类别字段,有什么方法可以在不定义另一个仅包含类别字段的模式的情况下做到这一点?

const handle = async () => {
        try {
            await InsertSchema.validate({
                category
            }, { abortEarly: false });
        } catch (e) {
            let errors = getYupValidationErrors(e);
            setInputErrors(errors);
        }
    }
Run Code Online (Sandbox Code Playgroud)

目前,仅在句柄函数中指定类别会返回两个验证错误:类别是必需的,用法是必需的。我只需要它来显示需要的类别。

Ber*_*rgi 5

创建两个单独的模式,然后concat

const CategorySchema = Yup.object().shape({
    category: Yup.string().required("Category is required."),
});
const UsageSchema = Yup.object().shape({
    usage: Yup.number().required("Usage is required."),
});
const InsertSchema = CategorySchema.concat(UsageSchema);
Run Code Online (Sandbox Code Playgroud)

现在您可以选择要验证的架构 - 完整的InsertSchema或仅CategorySchema.