Form validation is an important part of any app.
In this article, we’ll look at how to use Vee-Validate 4 in our Vue 3 app for form validation.
Handling Resets
We can reset the form by adding a button with the type
attribute set to reset
.
For example, we can write:
<template>
<Form :validation-schema="schema">
<Field name="email" as="input" />
<Field name="name" as="input" type="text" />
<Field name="password" as="input" type="password" />
<button type="Submit">Submit</button>
<button type="reset">Reset</button>
</Form>
</template>
<script>
import { Form, Field } from "vee-validate";
import * as yup from "yup";
export default {
components: {
Form,
Field,
},
data() {
const schema = yup.object().shape({
email: yup.string().required().email(),
name: yup.string().required(),
password: yup.string().required().min(8),
});
return {
schema,
};
},
};
</script>
When we click the Reset button, the form fields will clear.
Also, we can call the handleReset
method from the slot props to do the same thing:
<template>
<Form v-slot="{ handleReset }" :validation-schema="schema">
<Field name="email" as="input" />
<Field name="name" as="input" type="text" />
<Field name="password" as="input" type="password" />
<button type="button" @click="handleReset">Reset</button>
</Form>
</template>
<script>
import { Form, Field } from "vee-validate";
import * as yup from "yup";
export default {
components: {
Form,
Field,
},
data() {
const schema = yup.object().shape({
email: yup.string().required().email(),
name: yup.string().required(),
password: yup.string().required().min(8),
});
return {
schema,
};
},
};
</script>
Resetting Forms After Submit
We can also reset forms after submission.
For example, we can write:
<template>
<Form @submit="onSubmit" :validation-schema="schema">
<Field name="email" as="input" />
<Field name="name" as="input" type="text" />
<Field name="password" as="input" type="password" />
<button type="submit">Submit</button>
</Form>
</template>
<script>
import { Form, Field } from "vee-validate";
import * as yup from "yup";
export default {
components: {
Form,
Field,
},
data() {
const schema = yup.object().shape({
email: yup.string().required().email(),
name: yup.string().required(),
password: yup.string().required().min(8),
});
return {
schema,
};
},
methods: {
onSubmit(values, { resetForm }) {
console.log(values);
resetForm();
},
},
};
</script>
We call the resetForm
method in the submit
handler to clear the form fields.
The resetForm
method optionally takes an object with the values to reset to.
For instance, we can write:
<template>
<Form @submit="onSubmit" :validation-schema="schema">
<Field name="email" as="input" />
<Field name="name" as="input" type="text" />
<Field name="password" as="input" type="password" />
<button type="submit">Submit</button>
</Form>
</template>
<script>
import { Form, Field } from "vee-validate";
import * as yup from "yup";
export default {
components: {
Form,
Field,
},
data() {
const schema = yup.object().shape({
email: yup.string().required().email(),
name: yup.string().required(),
password: yup.string().required().min(8),
});
return {
schema,
};
},
methods: {
onSubmit(values, { resetForm }) {
console.log(values);
resetForm({
values: {
email: "example@example.com",
password: "",
},
});
},
},
};
</script>
to call resetForm
with an object. The values
property has an object with the form field names and corresponding values set.
We can also call resetForm
from the form’s ref:
<template>
<Form @submit="onSubmit" :validation-schema="schema" ref="form">
<Field name="email" as="input" />
<Field name="name" as="input" type="text" />
<Field name="password" as="input" type="password" />
<button type="submit">Submit</button>
</Form>
</template>
<script>
import { Form, Field } from "vee-validate";
import * as yup from "yup";
export default {
components: {
Form,
Field,
},
data() {
const schema = yup.object().shape({
email: yup.string().required().email(),
name: yup.string().required(),
password: yup.string().required().min(8),
});
return {
schema,
};
},
methods: {
onSubmit(values, { resetForm }) {
console.log(values);
this.$refs.form.resetForm();
},
},
};
</script>
Conclusion
We can reset forms with the resetForm
method in our Vue 3 app with Vee-Validate 4. It can be accessed in various ways.