gpt4 book ai didi

javascript - 是的 - 在运行时创建和修改验证模式

转载 作者:行者123 更新时间:2023-12-05 00:33:13 25 4
gpt4 key购买 nike

我需要创建一个用户然后更新它。所以我需要两种不同的模式。
这是第一个,用于用户创建:

const addressSchema = object().shape({
street: string().required(),
city: string().required(),
});

const signUpSchema = object().shape({
req: object().shape({
username: string().trim().required(),
password: string().trim().required(),
role: string().trim().required(),
address: addressSchema
.default(null)
.nullable()
.when(role, isAdminRole(object().required()))
})
})
现在,我想将上面的模式重用于客户的更新操作。但是,它不能等于,因为在更新操作中,例如,我不想更改密码。二、不能有 .required()限制。因为,在更新操作中,也许我只想修改用户名而不是 Angular 色。这就是更新架构的样子:
const addressUpdateSchema = object().shape({
street: string().min(1), // .min(1) because it's not a required field but it can't be an empty string neither
city: string().min(1),
});

const updateSchema = object().shape({
req: object().shape({
username: string().trim().min(1),
role: string().trim().min(1),
address: addressUpdateSchema
.default(null)
.nullable()
.when(role, isAdminRole(object()))
})
})
为了实现这些模式,这就是我所做的:
1 - 创建一个包含验证字段的对象数组:
const signUpValidationSchemaArray = [
{ name: 'username', validation: string().trim().required() },
{ name: 'password', validation: string().trim().required() }
{ name: 'role', validation: string().trim().required() }
{ name: 'address', validation: addressSchema.default(null).nullable().when(role, isAdminRole(object().required()))}
2 - 编写一个函数,从上面的数组开始返回一个 yup 模式:
const buildYupSchema = (fields: any[]) => {
const newSchema = {};
fields.forEach(field => newSchema[field.name] = field.validation);
return object().shape(newSchema);
}

buildYupSchema(signUpValidationSchemaArray);
为此,我们创建了 const signUpSchema = object().shape({ ...上面声明的架构。
现在,我想创建 const updateSchema = object().shape({ ... schema 尽可能使用已经编写好的代码。
3 - 这是问题所在,我正在尝试修改 signUpValidationSchemaArray 的验证字段
const updateValidationSchemaArray = [...signUpValidationSchemaArray].filter(field => field.name !== 'password' )
.map(field => {
name: field.name,
validation: field.validation.notRequired()
}
});

buildYupSchema(updateValidationSchemaArray);
.filter(field => field.name !== 'password' ) -> 我想排除密码,因为我不想在更新操作中修改它 validation: field.validation.notRequired() -> 我想删除 required() 限制。我尝试这样做,添加 notRequired();但它不起作用。也许以某种方式直接删除 .required() 会更好。但我不知道该怎么做。
  • 有什么建议么?
  • 这是实现我想要的好方法吗?
  • 最佳答案

    如果条件为两个,我正在使用响应式,这有效

    let schema; // IMPORTANT!!!!!!!

    $: if (editId && !blockUser && !resetPass) {
    //validation for edit info
    schema = yup.object().shape({
    email: yup.string().required().email().label("Email"),
    mobile: yup
    .number()
    .typeError("Mobile is a requried field")
    .label("Mobile No"),
    });
    } else {
    //validation for add
    schema = yup.object().shape({
    full_name: yup.string().required().max(30).label("Full Name"),
    email: yup.string().required().email().label("Email"),
    password: yup.string().required().min(8).label("Password"),
    mobile: yup
    .number()
    .typeError("Mobile is a requried field")
    .label("Mobile No")
    });
    }

    关于javascript - 是的 - 在运行时创建和修改验证模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63649830/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com