是的条件验证取决于另一个字段是否有效?
Yup conditional validation depending on if another field is valid?
我正在做一个项目,该项目有一个用 MUI、react-hook-forms 和 yup 制作的长注册表单。一次会呈现一个带有“下一步”按钮的字段,以将显示的输入字段更改为下一个(即从电子邮件字段转到名称字段)。现在它不允许我提交电子邮件字段并显示名称字段,因为它想要验证这两个字段,因为没有条件验证。
我有以下架构:
const schema = yup.object().shape({
email: yup.string().email().required(),
firstName: yup.string().required("Please enter your first name"),
});
根据我在网上阅读的内容,我了解到我需要对 firstName 字段使用 .when 方法,但我不知道如何根据电子邮件字段是否有效进行检查。我尝试了以下方法:
const schema = yup.object().shape({
email: yup.string().email().required(),
firstName: yup.string().when("email", {
is: (value) => value !== undefined,
then: yup.string().required("Please enter your first name"),
otherwise: yup.string().notRequired(),
}),
});
但是该值是在 onChange 上定义的,所以它不起作用。
我明白了。我将主模式分为emailSchema和nameSchema,然后根据注册的步骤(1是名字字段的步骤)使用concat方法。
const schema = step === 1 ? emailSchema.concat(nameSchema) : emailSchema
我正在做一个项目,该项目有一个用 MUI、react-hook-forms 和 yup 制作的长注册表单。一次会呈现一个带有“下一步”按钮的字段,以将显示的输入字段更改为下一个(即从电子邮件字段转到名称字段)。现在它不允许我提交电子邮件字段并显示名称字段,因为它想要验证这两个字段,因为没有条件验证。 我有以下架构:
const schema = yup.object().shape({
email: yup.string().email().required(),
firstName: yup.string().required("Please enter your first name"),
});
根据我在网上阅读的内容,我了解到我需要对 firstName 字段使用 .when 方法,但我不知道如何根据电子邮件字段是否有效进行检查。我尝试了以下方法:
const schema = yup.object().shape({
email: yup.string().email().required(),
firstName: yup.string().when("email", {
is: (value) => value !== undefined,
then: yup.string().required("Please enter your first name"),
otherwise: yup.string().notRequired(),
}),
});
但是该值是在 onChange 上定义的,所以它不起作用。
我明白了。我将主模式分为emailSchema和nameSchema,然后根据注册的步骤(1是名字字段的步骤)使用concat方法。
const schema = step === 1 ? emailSchema.concat(nameSchema) : emailSchema