我有一个名为email的字段名称,该字段使用validateSchema作为
来验证电子邮件格式。email: yup.string().required('required').email()
,还集成了一些API,当用户提交表单时会检查重复的电子邮件(在handleSubmit中调用API以确保电子邮件的格式正确),并在服务器响应已经存在时设置字段错误。所以这里的流程是
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进行验证,即使未在其字段上发生更改。有什么建议吗?
答案 0 :(得分:0)
解决此问题的最好方法之一是使表单仅在提交时验证。这意味着将false
/ validateOnBlur
组件中的validateOnChange
传递到Formik
和withFormik
。
您还可以传递异步字段级别的验证级别,如docs所示。