> 웹 프론트엔드 > JS 튜토리얼 > React Hook Form, Zod 및 Shadcn을 사용하여 쉽게 React 폼 구축

React Hook Form, Zod 및 Shadcn을 사용하여 쉽게 React 폼 구축

Linda Hamilton
풀어 주다: 2024-12-08 01:20:12
원래의
741명이 탐색했습니다.

양식은 사용자로서든 개발자 측에서든 모든 개발자가 접하게 되는 것입니다. 이는 대부분의 웹사이트에 필수적이지만 단순한 3필드 문의 양식부터 giga-monster-t-rex, 150개 필드가 있는 다중 페이지 양식, 동적 검증 및 비동기 검사에 이르기까지 복잡성이 매우 다양할 수 있습니다.

이 게시물에서는 React Hook Form, Zod 및 Shadcn을 사용하여 다양한 양식 요구 사항을 쉽게 처리하는 적응 가능하고 개발자 친화적인 솔루션을 만드는 방법을 살펴보겠습니다.

Building React Forms with Ease Using React Hook Form, Zod and Shadcn

우리가 만들 양식

이번 게시물에서 개발할 양식은 다음과 같습니다. 후속 작업으로 훨씬 더 복잡한 양식의 고급 사용에 대한 또 다른 게시물을 작성할 계획이므로 계속 지켜봐 주시기 바랍니다 ?

Building React Forms with Ease Using React Hook Form, Zod and Shadcn

도구를 만나보세요

양식을 작성하고 관리하는 데 사용할 스택을 살펴보겠습니다.

반응과 말벌

  • 프레임워크: Wasp(React, Node.js 및 Prisma용 전체 스택 프레임워크).
  • React를 통해 빠르고 효율적인 풀스택 웹 개발 및 배포가 가능합니다.

React Hook 양식

  • 주로 useForm 후크를 통해 React에서 양식을 작성하기 위한 경량 라이브러리입니다.
  • 양식 유효성 검사, 오류 관리를 처리하고 유연한 유효성 검사 방법과 다양한 UI 구성 요소 라이브러리와의 통합을 제공합니다.

조드

  • 상세하고 재사용 가능한 유효성 검사 스키마를 생성하기 위한 TypeScript 우선 유효성 검사 라이브러리.
  • TypeScript 유형과 통합하여 유효성 검사를 통일되게 유지하고 중복을 방지합니다.

Shadcn/UI

  • 프로젝트에 직접 삽입되어 개발자가 필요한 것만 가져오고 해당 구성 요소도 맞춤 설정할 수 있는 재사용 가능한 UI 구성 요소 컬렉션입니다.
  • React Hook Form 및 Zod에 대한 기본 지원을 제공합니다.

다음은 Shadcn 라이브러리의 양식 필드를 보여주는 예제 스니펫입니다.

<FormField
  control={form.control}
  name="name"
  render={({ field }) => (
    <FormItem>
      <FormLabel>Name</FormLabel>
      <FormControl>
        <Input {...field} />
      </FormControl>
      <FormMessage />
    </FormItem>
  )}
/>
로그인 후 복사
로그인 후 복사
로그인 후 복사

다른 종류의 스택을 사용하는 것을 선호하더라도 React와 RHF를 고수하는 한 이는 여전히 여러분을 이끌어줄 유효한 예입니다.

간단한 사용자 대시보드를 만들어 봅시다

기본 양식을 시연하는 데 사용할 애플리케이션은 필수 CRUD 작업이 포함된 관리 패널입니다. 여기에는 이메일 및 비밀번호 인증이 포함되며 모든 사용자의 테이블이 표시되는 메인 화면과 이 기사의 핵심이 될 사용자 생성 페이지의 두 페이지로 구성됩니다.

Building React Forms with Ease Using React Hook Form, Zod and Shadcn

Building React Forms with Ease Using React Hook Form, Zod and Shadcn

우리 양식에는 사용자가 지정된 요구 사항을 충족하지 않고는 양식을 제출(즉, 새 사용자 생성)할 수 없도록 하는 유효성 검사가 포함됩니다. 사용자 개체는 문자열, 날짜(예: 생년월일), 이메일 문자열 및 부울(예: 프리미엄 사용자 상태)과 같은 다양한 유효성 검사에 적합한 다양한 데이터 유형을 포함하므로 유효성 검사 예제에 대한 탁월한 후보입니다. 전체 Prisma 스키마 파일은 아래와 같습니다.

<FormField
  control={form.control}
  name="name"
  render={({ field }) => (
    <FormItem>
      <FormLabel>Name</FormLabel>
      <FormControl>
        <Input {...field} />
      </FormControl>
      <FormMessage />
    </FormItem>
  )}
/>
로그인 후 복사
로그인 후 복사
로그인 후 복사

프로젝트를 시작하기 위해 todo-ts라는 TypeScript와 함께 사전 정의된 Wasp 템플릿을 사용하겠습니다. 이 템플릿에는 로그인 및 가입 화면을 포함하여 인증을 위한 기성 구성 요소 및 라우팅이 함께 제공됩니다. 또한 Wasp에서 CRUD 작업이 어떻게 작동하는지에 대한 확실한 예를 제공하므로 프레임워크를 처음 접하는 경우 이상적입니다. 또한 새로운 Wasp TypeScript SDK를 활용하여 사용자 정의에 대한 확장된 유연성을 제공하므로 구성을 관리할 것입니다.

이 기사가 유용하다고 생각하시나요?

Wasp 팀은 현대적인 오픈 소스 React/NodeJS 프레임워크 구축은 물론이고 이와 같은 콘텐츠를 만들기 위해 열심히 노력하고 있습니다.

여러분의 지지를 표현하는 가장 쉬운 방법은 Wasp 저장소에 별표를 표시하는 것입니다! ? 하지만 (기여를 위해 또는 단순히 제품을 테스트하기 위해) 저장소를 살펴볼 수 있다면 매우 감사하겠습니다. 아래 버튼을 클릭하여 Wasp에게 별표를 주고 응원을 보내주세요!

Building React Forms with Ease Using React Hook Form, Zod and Shadcn

⭐️ 지원해 주셔서 감사합니다.

모든 것을 하나로 묶기 - Zod 스키마 React Hook Form 인스턴스 레이아웃

양식 작업을 위해 먼저 Zod 유효성 검사 스키마를 정의하겠습니다. 우리의 양식에는 문자열, 날짜, 부울의 세 가지 데이터 유형이 있습니다. 대부분의 필드에 유효성 검사를 적용합니다. 이름과 성은 필수이며 이메일은 내장된 이메일 유효성 검사를 활용합니다. Zod는 이메일, URL, UUID와 같은 다양한 유형에 대한 내장 유효성 검사를 통해 일반적인 문자열 유형 유효성 검사를 단순화합니다. 이는 이메일 필드에 도움이 됩니다.

추가 확인을 위해 날짜를 미래 날짜로 설정할 수 없으며 premiumUser 필드는 부울만 있으면 됩니다. Zod는 기본 유효성 검사 오류 메시지도 제공하지만 이를 사용자 정의할 수 있습니다. 예를 들어 이름: z.string().min(1) 대신 이름: z.string().min(1, '이름이 필요합니다')을 지정할 수 있습니다.

<FormField
  control={form.control}
  name="name"
  render={({ field }) => (
    <FormItem>
      <FormLabel>Name</FormLabel>
      <FormControl>
        <Input {...field} />
      </FormControl>
      <FormMessage />
    </FormItem>
  )}
/>
로그인 후 복사
로그인 후 복사
로그인 후 복사

우리 양식은 양식 값 처리 및 유효성 검사, 오류 확인, 양식 상태 관리를 위한 광범위한 옵션을 제공하는 React Hook Form의 useForm 후크로 관리됩니다. Zod 검증 스키마를 통합하기 위해 Zod 해석기를 사용하여 React Hook Form이 이전에 정의한 검증을 적용할 수 있도록 하겠습니다.

양식의 defaultValues는 고객 개체에서 파생됩니다. 이 구성 요소는 신규 고객 추가와 기존 고객 편집에 모두 사용되므로 필요한 데이터를 입력으로 전달합니다. 신규 고객의 경우 몇 가지 합리적인 기본값이 사용됩니다. 기존 고객의 경우 데이터베이스에서 데이터가 검색됩니다. 기본값을 설정하고 createCustomer 또는 updateCustomer를 호출할지 결정하는 것 외에 양식 처리의 다른 모든 측면은 동일하게 유지됩니다.

model Customer {
  id    Int    @id @default(autoincrement())
  name  String
  surname String
  email String
  dateOfBirth DateTime
  premiumUser Boolean
}
로그인 후 복사

마지막 단계는 양식 자체를 생성하고 이를 TSX 파일에 조합하는 것입니다. 앞에서 설명한 것처럼 이 프로세스는 간단합니다. Shadcn 컨트롤과 함께 텍스트 입력, 날짜 선택기 또는 확인란을 사용하든 유사한 구조를 따릅니다.

  • FormField 요소를 생성하고 해당 컨트롤, 이름 및 렌더링 속성을 설정하는 것부터 시작하세요.
  • 렌더링 속성은 양식 요소 자체를 포함하므로 핵심입니다.
  • 일반적으로 모든 것을 FormItem에 래핑하고, 레이블에 대한 FormLabel을 추가하고, 적절한 값과 설정 메서드를 사용하여 제어되는 양식 요소를 FormControl 내에 배치합니다.
  • 마지막으로 검증이 실패할 경우 Zod 검증 메시지를 표시하는 FormMessage를 아래에 포함합니다.

Building React Forms with Ease Using React Hook Form, Zod and Shadcn

  const formSchema = z.object({
    name: z.string().min(1, { message: 'Name is required' }),
    surname: z.string().min(1, { message: 'Surname is required' }),
    email: z.string().email({ message: 'Invalid email address' }),
    dateOfBirth: z
      .date()
      .max(new Date(), { message: 'Date cannot be in the future' }),
    premiumUser: z.boolean(),
  });
로그인 후 복사

완성된 애플리케이션을 보고 싶다면 GitHub 저장소(GitHub Repo)를 확인하세요. 이 기사를 통해 양식 작업이 더 쉬워졌기를 바랍니다. 양식 관련 콘텐츠에 더 관심이 있으시면 2부를 계속 지켜봐 주시기 바랍니다! 다음 부분에서는 애플리케이션을 향상시키기 위한 고급 패턴과 검증 기술을 살펴보겠습니다.

이 게시물이 마음에 드셨다면 GitHub에 Wasp 출연을 고려해 보세요! 귀하의 지원은 우리가 모든 사람을 위해 웹 개발을 더 쉽고 원활하게 만드는 데 도움이 됩니다. ?

위 내용은 React Hook Form, Zod 및 Shadcn을 사용하여 쉽게 React 폼 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿