我遇到了类似的问题。我成功地使用了这个解决方法。
想法:将整个表单数据作为上下文传递给模式并使用访问任何表单值
this.options.context
const schema = yup.object().shape({
enabled: yup.boolean(),
contactDetail: yup.object().shape({
phoneNumber1: yup.string().nullable(),
phoneNumber2: yup.string().nullable(),
email: yup.string().test('email', 'test', async function () {
// this.options.context.enabled
}),
}),
});
传递上下文
没有福米克
在验证时将您的表单数据作为上下文发送
schema.validateSync(data, {context: form_data})
与福米克
使用validate而不是validationSchema
将表单数据作为validateYupSchema中的第四个参数传递,它表示上下文,以后可以在模式中访问。
将您的架构作为validateYupSchema的第二个参数传递。
<Formik
validate={(value) => {
try {
validateYupSchema(value, schema, true, value);
} catch (err) {
return yupToFormErrors(err); //for rendering validation errors
}
return {};
}}
onSubmit={} />