Form
Betav1.0.0react-hook-form + zod 위에 만든 폼 컴포넌트. label / control / description / message 자동 연결.
Loading…
import { useForm } from "react-hook-form";
import { zodResolver } from "@hookform/resolvers/zod";
import { z } from "zod";
import {
Form,
FormControl,
FormDescription,
FormField,
FormItem,
FormLabel,
FormMessage,
} from "@/components/ui/form";
const schema = z.object({
username: z.string().min(2),
email: z.string().email(),
});
const form = useForm<z.infer<typeof schema>>({
resolver: zodResolver(schema),
defaultValues: { username: "", email: "" },
});
<Form {...form}>
<form onSubmit={form.handleSubmit(onSubmit)}>
<FormField
control={form.control}
name="username"
render={({ field }) => (
<FormItem>
<FormLabel>Username</FormLabel>
<FormControl><Input {...field} /></FormControl>
<FormMessage />
</FormItem>
)}
/>
<Button type="submit">Submit</Button>
</form>
</Form>Installation
pnpm dlx shadcn@latest add https://groudit.com/r/form.jsonComposition
Form
└── FormField
└── FormItem
├── FormLabel
├── FormControl
├── FormDescription
└── FormMessageDependencies
설치 시 자동으로 함께 들어오는 의존성. 모든 버전은 정확히 고정되어 자동 업데이트를 방지합니다.
npm packages
| Package | Version |
|---|---|
| react-hook-form | 7.77.0 |
| @hookform/resolvers | 5.4.0 |
| zod | 4.4.3 |
| clsx | 2.1.1 |
| tailwind-merge | 3.6.0 |
Accessibility
이 컴포넌트는 WAI-ARIA form 패턴을 따릅니다.
Notes
- •FormControl 이 자동으로 label htmlFor, aria-describedby, aria-invalid 연결.
- •에러 메시지는 FormMessage 로 — 사용자가 폼 오류 즉시 인지 가능.