ホームページ > ウェブフロントエンド > jsチュートリアル > React Hook Form、Zod、Shadcn を使用して React フォームを簡単に構築する

React Hook Form、Zod、Shadcn を使用して React フォームを簡単に構築する

Linda Hamilton
リリース: 2024-12-08 01:20:12
オリジナル
739 人が閲覧しました

フォームは、ユーザーとしても開発者側としても、すべての開発者が遭遇するものです。これらはほとんどの Web サイトに不可欠ですが、その複雑さは、単純な 3 フィールドの問い合わせフォームから、ギガモンスター ティ レックス、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 を使用して、高速かつ効率的なフルスタック Web 開発とデプロイメントを可能にします。

リアクトフックフォーム

  • 主に 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 操作を備えた管理パネルです。これには電子メールとパスワードの認証が含まれており、すべてのユーザーの表を表示するメイン画面と、この記事の主役となるユーザー作成ページの 2 つのページで構成されます。

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

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

私たちのフォームには、指定された要件を満たさずにユーザーがフォームを送信 (つまり、新しいユーザーの作成) できないことを保証するための検証が含まれます。 User オブジェクトには、文字列、日付 (生年月日など)、電子メール文字列、ブール値 (プレミアム ユーザー ステータスなど) など、さまざまな検証に適したさまざまなデータ型が含まれているため、検証例の優れた候補です。完全な 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 検証スキーマを定義します。このフォームには、文字列、日付、ブール値の 3 つのデータ型があります。ほとんどのフィールドに検証を適用します。名前と姓は必須ですが、電子メールは組み込みの電子メール検証を利用します。 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 要素を作成し、そのコントロール、名前、レンダリング プロパティを設定します。
  • render プロパティにはフォーム要素自体が含まれるため、重要です。
  • 通常、すべてを 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 をスターにすることを検討してください。皆様のご支援により、Web 開発が誰にとってもより簡単かつスムーズに行えるようになります。 ?

以上がReact Hook Form、Zod、Shadcn を使用して React フォームを簡単に構築するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート