vue3 + vee-validate - handleSubmit 没有 return 值

vue3 + vee-validate - handleSubmit doesn't return values

我正在使用最新的 vue@3.1.2 和 Composition API。我想根据他们的文档使用当前的 vee-validate@4.4.5。但是当使用 handleSubmit 时,没有任何效果如我所料。

<form @submit="onSubmit">
  <div class="mb-3">
    <label for="edit-email" class="form-label">E-mail</label>
    <input
      id="edit-email"
      name="email"
      class="form-control"
      v-model="email"
      type="text"
      />
    <div class="invalid-feedback">{{ emailError }}</div>
  </div> 

  <button class="btn btn-primary" type="submit">Save</button> 
</form>
import { useField, useForm } from "vee-validate";
import { object, string } from "yup";

export default {
  name: "App",
  setup() {
    const { handleSubmit } = useForm();

    const onSubmit = handleSubmit((values) => { 
      console.log(values, submitCount.value); // values is empty: {}
    });

    const schema = object({
      email: string().required().email(),
    });

    useForm({
      validationSchema: schema,
      initialValues: {
        email: "",
      },
    });

    const { value: email, errorMessage: emailError } = useField("email");

    return {
      email,
      emailError, 
      onSubmit,
    };
  },
};

复现问题:

https://codesandbox.io/s/vue3-vee-validate-handlesubmit-with-no-values-oj0ot?file=/src/App.vue


文档:

https://vee-validate.logaretm.com/v4/guide/composition-api/handling-forms#javascript-submissions-ajax

我有两个问题:

  1. 为什么提交不为表单调用 validate(),结果在出错时不阻止提交?
  2. 为什么在 handleForm 回调参数中 values 是空的?

我做错了什么?

我认为您的第一个示例不起作用,因为您使用了 useForm 两次并且必须使用一次

我已经在您的示例中测试了这段代码,它对我有用

let response = ref("Empty.");

    const schema = object({
      email: string().required().email(),
      password: string().required().min(4),
    });

    const { errors: formErrors, handleSubmit, setFieldError, submitCount } = useForm({
      validationSchema: schema,
      initialValues: {
        email: "",
        password: "",
      },
      // validateOnMount: true,
    });