Skip to content

BUG: validateFields throws error, errorField is an empty array #4401

@lichinlichin

Description

@lichinlichin
  • I have searched the issues of this repository and believe that this is not a duplicate.

Version

2.2.2

Environment

os: macOS Big Sur 11.1, browser: chrome 91.0.4472.106, vue: 3.1.4

Reproduction link

Edit on CodeSandbox

Steps to reproduce

输入 pass, confirm, age,点击"校验"按钮

What is expected?

根据 规则 对 'pass', 'confirm' 表单项进行校验,若符合规则,打印 values,若不符合规则,catch 异常并打印,对应表单项出现警告交互

What is actually happening?

符合规则的表单内容同样抛出了异常被 catch,代码逻辑和异常如下

try {
    const values = await formRef.value.validateFields(['pass', 'checkPass'])
    console.log(values)
} catch (err) {
    console.log('捕获异常', err)
}

-----------------------console-----------------------
捕获异常, {values: Object, errorFields: Array(0), outOfDate: true}
{
    "values": {
        "pass": "aa22",
        "checkPass": "aa22"
    },
    "errorFields": [],
    "outOfDate": true
}

因为想要复用一些规则,同时该规则校验需要其他表单项参数,所以用函数返回

const validatePass = (validateFields, checkPass) => {
  return {
    trigger: "change",
    validator: async (rule, value) => {
      if (value !== "" && checkPass !== "") {
        validateFields("checkPass");
      }
      return Promise.resolve();
    },
  };
};

const validatePass2 = (pass) => {
  return {
    trigger: "change",
    validator: async (rule, value) => {
      if (value !== pass) {
        return Promise.reject("Two inputs don't match!");
      }
      return Promise.resolve();
    },
  };
};

const rules = computed(() => ({
  pass: [
    // 如果将以下注释打开,校验捕获的异常会很奇怪
    // { required: true, message: "please input the password" },
    validatePass(formRef?.value?.validateFields, formState.checkPass),
  ],
  checkPass: [validatePass2(formState.pass)],
  age: [
    {
      validator: checkAge,
      trigger: "change",
    },
  ],
}));

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions