0Pricing
React Academy · レッスン

Form Actions:ミューテーションのAPI Routesを置き換える

Server ActionsをHTMLフォームのactionに直接接続し、定型コードなしでフォームのミューテーションと完全な再検証を実現します。

「Form Actions:ミューテーションのAPI Routesを置き換える」はCoddyKit上の無料React Academyレッスンです。 これはレッスン2/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはReact Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 React Academyコースには全4レッスンが含まれています。

従来のパターン

従来のNext.jsアプリケーションでは、フォーム送信にクライアントコンポーネントが必要です。その中のonSubmitハンドラーからfetch()を呼び出し、API RouteへデータをPOSTします。このパターンは動作しますが、クライアント側のfetchロジックとサーバー側のRouteハンドラーを別々に記述して保守する必要があります。

Server Actionsでフォームを簡素化

Server Actionsを使うと、fetch呼び出しとAPI Routeを1つの関数に置き換えられます。フォーム要素には、actionプロパティとしてServer Actionを指定します:<form action={serverAction}>。Reactが送信をインターセプトし、フォームデータを渡してActionを自動的に呼び出します。

FormDataによるフォームフィールドへのアクセス

フォームから呼び出された場合、Server Actionは引数としてFormDataオブジェクトを自動的に受け取ります。個々のフィールドにはformData.get('email')でアクセスでき、値は文字列として返されます。複数選択フィールドに使用するgetAll()など、FormDataの標準メソッドをすべて利用できます。

Actionからの結果の返却

Server Actionは、クライアントで利用できるシリアライズ可能な値を返せます。{ error: 'Email already exists' }のようなエラーオブジェクトや、{ success: true }のような成功フラグを返すことで、ページ全体を再読み込みせずにクライアント側でUIを適切に更新できます。

ページコンポーネントをシンプルに保つ

フォームのactionがServer Actionであるため、フォームを配置するページコンポーネントをClient Componentにする必要はありません。サーバーがフォームを静的HTMLとしてレンダリングし、エラー表示などのインタラクティブな部分だけがクライアント側のJavaScriptを必要とします。これにより、クライアントバンドルを大幅に小さくできます。

プログレッシブエンハンスメントを標準搭載

action={serverAction}を指定したフォームは、JavaScriptが有効でなくても動作します。ブラウザーは標準のHTMLフォームPOSTを実行し、サーバーがActionを実行して更新後のページを返します。この真のプログレッシブエンハンスメントにより、あらゆる環境でフォームが適切に機能します。

ミューテーション後のデータの再検証

Server Actionでデータを変更した後は、キャッシュされたページデータを更新する必要があります。Action内でrevalidatePath('/dashboard')を呼び出すと、そのパスに対するNext.jsのキャッシュが無効化され、次のリクエストで最新のデータが取得されます。これは、ミューテーション後にサーバーレンダリングされたページを最新の状態に保つ標準的な方法です。

きめ細かなキャッシュ無効化

revalidateTag('user-data')を使うと、revalidatePathよりきめ細かくキャッシュを無効化できます。next: { tags: ['user-data'] }を指定してfetch呼び出しにタグを付け、Server Action内からタグ付けされたすべてのデータを一度に無効化します。そのデータを表示するパスがどれであるかは問いません。

Action後のリダイレクト

Server Actionsでは、ミューテーションが成功した後にnext/navigationモジュールのredirect('/success')を呼び出して、ユーザーを新しいページへリダイレクトできます。このリダイレクトはサーバー側で処理されるため、ブラウザーはクライアント側のリダイレクトではなく、適切なナビゲーションレスポンスを受け取ります。

startTransitionによるフォーム以外のミューテーション

Server Actionsはフォーム送信に限定されません。ボタンのクリックなどフォーム以外のトリガーでは、Actionの呼び出しをstartTransition(() => action(arg))でラップします。これによりナビゲーションがトランジションとして扱われ、サーバー上でActionが実行されている間もReactは現在のUIを表示し続けられます。

Action内でのバリデーション

サーバー側のバリデーションにはServer Actionsが適しています。FormDataのフィールドを検証し、検証に失敗した場合はエラーを返し、すべてのフィールドが有効な場合にだけミューテーションを実行します。Zodのようなライブラリも適しています。FormDataを型付きスキーマにパースし、失敗時にはエラーマップを返せます。

FormDataに関する問題

フォーム送信によって呼び出された場合、Server Actionは引数として何を受け取りますか。

レッスンのまとめ

Server Actionsは、フォームのミューテーションで使われてきたfetch + API Routeパターンに置き換わるものです。フォームのactionプロパティにはServer Actionを直接指定でき、ActionはFormDataオブジェクトを受け取ります。ActionはクライアントUIの更新に使えるシリアライズ可能な結果を返し、キャッシュ無効化のためのrevalidatePathとrevalidateTagをサポートします。また、JavaScriptがなくてもプログレッシブに動作します。

よくある質問

「Form Actions:ミューテーションのAPI Routesを置き換える」レッスンは無料ですか?

はい。「Form Actions:ミューテーションのAPI Routesを置き換える」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、React Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 React Academyコースには全4レッスンが含まれています。

「Form Actions:ミューテーションのAPI Routesを置き換える」で何を学びますか?

Server ActionsをHTMLフォームのactionに直接接続し、定型コードなしでフォームのミューテーションと完全な再検証を実現します。 ブラウザで直接実行するハンズオンコードでReact Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

React Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのReact Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン2/4です。

「Form Actions:ミューテーションのAPI Routesを置き換える」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このReact Academyレッスンでコードを書いて実行できますか?

はい。すべてのReact Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. React 19とNext.jsのServer Actions
  2. Form Actions:ミューテーションのAPI Routesを置き換える
  3. useActionStateとuseFormStatus
  4. Server Actionsによるプログレッシブエンハンスメント
← React Academyに戻る