Vue 3 Form Hook API Reference
useForm
Section titled “useForm”Initializes a reactive form state with validation logic.
import { useForm } from '@resourge/vue3-hook-form';
const { form, handleSubmit, getErrors } = useForm(modelInstance, options);Parameters
Section titled “Parameters”-
model: A class instance representing the form’s default state. -
options: Optional settings for validation.validate:(form) => ValidationResult— custom validation logic using @resourge/schema.validateDefault:boolean— if true, runs validation immediately after creation.
Returns
Section titled “Returns”An object with:
form: reactive model instance.errors: current error state.isValid: boolean indicating form validity.handleSubmit: function to handle form submission.getErrors(key): returns validation messages for a given field.changeValue(key, value): updates a form field.getValue(key): gets the current value of a form field.hasError(key): returns whether the field has an error.reset(newForm?): resets the form to a new instance.setError(error): sets one or more validation errors.onChange(key, callback): watch a specific field.watch(callback): watch the entire form state.
Example
Section titled “Example”export class LoginFormModel { username = ''; password = '';}
const schema = object<LoginFormModel>({ username: string().required('Username is required'), password: string().required('Password is required')});
const useLoginForm = () => useForm(new LoginFormModel(), { validate: (form) => schema.validate(form), validateDefault: true });Validation Integration
Section titled “Validation Integration”The validate function allows you to connect to external validation systems, like @resourge/schema. The return value should be an object of type:
interface ValidationResult { valid: boolean; errors?: Record<string, string[]>;}Nested Model Support
Section titled “Nested Model Support”Nested class models can be used and validated recursively.
export class AddressModel { street = ''; city = '';}
export class UserProfileModel { name = ''; address = new AddressModel();}
const schema = object<UserProfileModel>({ name: string().required('Required'), address: object<AddressModel>({ street: string().required(), city: string().required() })});
useForm(new UserProfileModel(), { validate: form => schema.validate(form) });