Skip to content

useVqForm

Composable that returns a form wrapper component and direct access to resetForm. Use it when you need programmatic form control — such as resetting after submission or composing forms dynamically.

Parameters

ParamTypeDefaultDescription
formIdstringrequiredUnique form identifier
validationSchemaobjectundefinedYup validation schema
initialValuesobjectundefinedInitial form field values
valuesSchemaobjectundefinedMaps nested API response keys to form field names

Returns

KeyTypeDescription
wrapperComponentRender this as the <form> element in your template
resetFormfunctionClears all field values and validation errors

Basic Example

vue
<script setup>
import { useVqForm, VqTextField, VqSubmitBtn } from "@qnx/vuetify";
import { object, string } from "yup";

const { wrapper: UserForm, resetForm } = useVqForm({
  formId: "create-user",
  validationSchema: object({
    name: string().required("Name is required"),
    email: string().required().email("Invalid email"),
  }),
  initialValues: { name: "", email: "" },
});
</script>

<template>
  <UserForm action="users/create" method="POST" @submited-success="resetForm">
    <VqTextField name="name" label="Name" />
    <VqTextField name="email" label="Email" />
    <VqSubmitBtn>Create</VqSubmitBtn>
  </UserForm>
</template>

Edit Form with Manual Reset Button

vue
<script setup>
import { useVqForm, VqTextField, VqSubmitBtn, useMessageInstance } from "@qnx/vuetify";
import { object, string } from "yup";

const props = defineProps({ user: Object });
const message = useMessageInstance();

const { wrapper: EditForm, resetForm } = useVqForm({
  formId: "edit-user",
  validationSchema: object({
    name: string().required(),
    email: string().required().email(),
  }),
  initialValues: props.user,
});

const onSuccess = () => {
  message.success("User updated!");
};
</script>

<template>
  <EditForm :action="`users/${props.user.id}`" method="PUT" @submited-success="onSuccess">
    <VqTextField name="name" label="Name" />
    <VqTextField name="email" label="Email" />
    <div class="d-flex gap-2">
      <VqSubmitBtn>Save</VqSubmitBtn>
      <v-btn variant="outlined" @click="resetForm">Reset</v-btn>
    </div>
  </EditForm>
</template>