Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Vue Composition API for validating form.

License

NotificationsYou must be signed in to change notification settings

vue-use-form/vue-use-form

Repository files navigation

Inspired byreact-hook-form, if you love react-hook-form usage, come on and try it!

Document

The usage is almost the same as that of the react-hook-form. you can goreact-hook-form to check.

Install

# npmnpm i vue-use-form# pnpmpnpm i vue-use-form# yarnyarn add vue-use-form

🚀Features

  • 🦾 Type Strong: Written in TypeScript
  • 🏆 No Component: No need to import any components to use, you can use it in all UI framework
  • 😍 Easy to use: Just 3 main hooks: useForm, useFormState, useFieldArray

TODO

  • 🐵Main features
    • 🍉useForm
      • 🍎 register -> disabled -> setValueAsDate
    • 🍊useFormState
    • 🍋useFieldArray
    • 🥝directive:v-form
    • 🍎schema
      • 🍵 class-validator
      • 🍶 Yup
  • Test
    • 🐯Unit test
  • 🐼 Community(WIP...)
    • 🎋中文文档
    • 📖Documentation .

🎁Try it online

🎮play with element-plus by default way.

🎮play with class-validator by usingclass-validator resolver

🚣playground

you can fork/download this repo, and then just 3 steps can make playground run

# 1. open this repo folder in your local# 2. init dependenciespnpm i# 3. open the playground folder and run `dev` script orpnpm run dev

Quick Start

<script setup lang="ts">import {useForm }from'vue-use-form'interfaceInputs {  username:string  password:string  age:number}const {  formState,  register,  createSubmitHandler,  createErrorHandler,}=useForm<Inputs>({  mode:'onChange',  shouldFocusError:true,})const [usernameField, usernameRef]=register('username', {  required:'Username is required!',  minLength: { value:3, message:'Username must be at least 3 characters' },  maxLength: { value:10, message:'Username must be at most 10 characters' },validate: (value)=> {if (value==='admin') {return'Username is reserved!'    }  },})const [passwordField, passwordRef]=register('password', {  required:'Password is required!',  minLength: { value:8, message:'Password must be at least 8 characters' },  maxLength: { value:20, message:'Password must be at most 20 characters' },  validate: {isContainLowercase: (value)=> {if (!/[a-z]/.test(value)) {return'Password must contain at least one lowercase letter'      }    },isContainUppercase: (value)=> {if (!/[A-Z]/.test(value)) {return'Password must contain at least one uppercase letter'      }    },  },})const onSubmit=createSubmitHandler((data)=> {console.log('validate success',data)})const onError=createErrorHandler((errors)=> {console.log('validate error',errors)})</script><template>  <form@submit.prevent="handleSubmit(onSubmit, onError)()">    <inputref="usernameRef"v-model="usernameField"name="username">    <inputref="passwordRef"v-model="passwordField"name="password">    <inputv-form="register('age', {          required: 'Age is required!',          min: { value: 18, message: 'Age must be at least 18' },          max: { value: 10000, message: '?' },          valueAsNumber: true,        })"type="number"name="age">    <buttontype="submit"v-text="'Submit'" />  </form></template>

use with schema

use with unplugin-vForm

<script setup lang="ts">import {useForm}from'vue-use-form'const {  register,formState: {errors},}=useForm<{  email:string  age:number}>({  mode:'onChange',})</script><template>  <inputv-form="register('email', {    required: true  })">  <inputv-form="register('age', {    required: true,  })"></template>

[8]ページ先頭

©2009-2026 Movatter.jp