Skip to content

useForm composable

useForm<T> composable allow you to create Type-safe forms with autocompletion feature.

You can also use schema validators like Zod, Valibot, or ArkType and infer the types from there.

Usage

For basic usage you have to define the components and functions from the useForm composable. It gives you autocompletion for name attribute on Field, FieldArrray and error-for attribute on Error components.

Initial values types

When you define initialValues as option in useForm or :initial-values property on Form component it gives you full type safety.

Basic

vue
<script lang="ts" setup>
import { useForm } from './composable/useForm';

type FormData = {
  username: string;
  password: string;
  stay_loggedin: boolean;
}

const {
  Form,
  Field,
  Error,
  reset,
  handleSubmit,
  setError,
} = useForm<FormData>({
  initialValues: {
      stay_loggedin: false,
  },
});

const submit = handleSubmit((data) => {
  console.log('username', data?.username);
  setError('username', 'Username required');
});
</script>
<template>
  <div>
      <Form
          @submit="submit"
          v-slot="{ values }">
          <div>
              <Field name="username" />
              <Error error-for="username" />
          </div>
          <div>
              <Field
                  name="password"
                  type="password" />
          </div>
          <div>
              <Field
                  name="stay_loggedin"
                  v-slot="{ field }">
                  <input
                      id="loggedin"
                      type="checkbox"
                      v-bind="field" />
                  <label for="loggedin">Stay logged in</label>
              </Field>
          </div>
          <button>Send</button>
          <button
              type="button"
              @click="reset">
              Reset
          </button>
          <pre>{{ values }}</pre>
      </Form>
  </div>
</template>

API

useForm() composable provides several components and functions:

Components

NameDescription
FormForm element.
FieldUse for create input element.
FieldArrayUse for create input array elements.
ErrorUse for create input array elements.

Methods

FunctionParameterDescription
handleSubmit(cb: (data: T) => void) => voidhandleSubmit takes a callback function, which provides the typed data.
setError{name: T, message: string}Set error message for defined field. name is typed and have autocomplete
setValue{name: T, value: any}Set value for defined field. name is typed and have autocomplete
setValues`Record<T, any>``Set values for defined field. arguement object is typed and have autocomplete
setInitalValuesRecord<T, any>Set initial values.
resetvoidReset form values.

Variables

NameDescription
isSubmittingForm submitting state
valuesForm data values