如何在 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
传递给 validateOnBlur
和 validateOnChange
。
您还可以传递异步字段级验证级别,如您在 docs 中所见。
我有一个名为 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
传递给 validateOnBlur
和 validateOnChange
。
您还可以传递异步字段级验证级别,如您在 docs 中所见。