我有一个名为email的字段,使用validationSchema来验证email的格式。
email: yup.string().required('required').email()
并集成一些API,当用户提交表单时,检查重复的电子邮件(API在handleSubmit中被调用,以确保电子邮件是正确的格式),当服务器响应时,将设置一个字段错误,因为它已经存在。所以这里的流程是
Checking an email format (onBlur and onChange) -> user press submit form -> call API checking duplicate email -> if email is already exist then setFieldError as 'Email is already exist' or otherwise submit the form.
这和预期的一样,但是当表单包含多个字段时,问题就来了。当表单内发生任何变化时,所有字段都会被验证。如果我有2个字段:电子邮件和密码。在用户提交重复的电子邮件字段后,正确地显示 "电子邮件已经存在",但当我更新密码字段的值。电子邮件中的错误将消失,并得到验证的validationSchema,甚至改变不发生在其字段。有什么建议吗?
解决这个问题的一个方法不是最好的,是让表单只在提交时验证。这意味着通过 false
到 validateOnBlur
和 validateOnChange
在你 Formik
withFormik
组件。
你也可以通过一个异步字段级别的验证级别,正如你在 文件.