如何在 formik 中处理 API 验证调用

How to handle API validation call in formik

我有一个名为 email 的字段名,它使用 validationSchema 验证电子邮件格式

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 个字段电子邮件和密码。用户提交副本后,电子邮件字段正确显示 'Email is already exist' 但是当我更新密码字段中的值时。电子邮件中的错误将消失并通过 validationSchema 进行验证,即使更改未发生在其字段上。对此有何建议?

解决此问题的一种方法不是最好的方法是使表单仅在提交时验证。这意味着在 Formik / withFormik 组件中将 false 传递给 validateOnBlurvalidateOnChange

您还可以传递异步字段级验证级别,如您在 docs 中所见。