Caroa UI

Form

react-hook-formと連携したフォームコンポーネント。

インポート

'use client'
 
import { useForm } from 'react-hook-form'

基本的な使い方

interface FormData {
  email: string
  password: string
}
 
function LoginForm() {
  const form = useForm<FormData>()
 
  const onSubmit = (data: FormData) => {
    console.log(data)
  }
 
  return (
    <Form {...form}>
      <form onSubmit={form.handleSubmit(onSubmit)} className="space-y-4">
        <FormField
          control={form.control}
          name="email"
          render={({ field }) => (
            <FormItem>
              <FormLabel>メールアドレス</FormLabel>
              <FormControl>
                <Input type="email" {...field} />
              </FormControl>
              <FormMessage />
            </FormItem>
          )}
        />
        <FormField
          control={form.control}
          name="password"
          render={({ field }) => (
            <FormItem>
              <FormLabel>パスワード</FormLabel>
              <FormControl>
                <Input type="password" {...field} />
              </FormControl>
              <FormDescription>8文字以上で入力してください</FormDescription>
              <FormMessage />
            </FormItem>
          )}
        />
        <Button type="submit">ログイン</Button>
      </form>
    </Form>
  )
}

バリデーション付き

import { zodResolver } from '@hookform/resolvers/zod'
import * as z from 'zod'
 
const schema = z.object({
  email: z.string().email('有効なメールアドレスを入力してください'),
  password: z.string().min(8, '8文字以上で入力してください'),
})
 
const form = useForm({
  resolver: zodResolver(schema),
})

Props (FormField)

PropTypeDefaultDescription
control*Control-react-hook-formのcontrol
name*string-フィールド名
render*(props) => ReactNode-フィールドのレンダリング関数

On this page