我正在使用 Yup 的.test()方法在 Formik 中尝试异步验证,并且需要设置我从 API 获得的错误消息。根据后端的某些条件,错误消息会有所不同。
尝试了这里提到的几个解决方案
https://github.com/jquense/yup/issues/222和使用 Yup 和 Typescript 的动态验证消息
但是是的,抛出了test().
文档说
所有测试都必须提供名称、错误消息和必须返回 true 或 false 或 ValidationError 的验证函数。使测试异步返回一个可解决 true 或 false 或 ValidationError 的Promise。
我正在解决带有错误消息的新 ValidationError 但它仍然会引发默认错误。
这是代码。
const schema = Yup.object().shape({
  email: Yup.string().test(
    "email_async_validation",
    "Email Validation Error", // YUP always throws this error
    value => {
      return new Promise((resolve, reject) => {
        emailValidationApi(value)
          .then(res => {
            const { message } = res.data; // I want this error message to be shown in form.
            resolve(new Yup.ValidationError(message));
          })
          .catch(e => {
            console.log(e);
          });
      });
    }
  )
});