エラーの情報を表示する
エラーを画面に表示するために、まずは Server Action を変更しましょう。
このように変更することで、validation に失敗した結果をclient側で取り扱えるようになります。
次に、画面にエラーメッセージを表示するために、sign-in-form.tsx
を変更して、エラーをStateに保存するようにします。
またエラーを表示するために、クライアントで再レンダリングする必要がある、use client
をつける必要があります。
あとは、エラーの情報を画面に表示するように変更します。
ここまで実装できたら、http://localhost:3000
にアクセスして、再度ログインフォームに下記のような値を入れてみてください。
- email:
foo@example
- password: "" // 何も入力しない
下記のようにエラーが表示されることを確認してください。
組み込みのHooksを利用してより簡潔に書く
useFormState
を利用することで、簡潔に書くことができます。
useFormState
を使う前に下記のように action を変更しておきましょう。
理由は後述しますので、まずは変更してみてください。
次に、useFormState
を利用する形にsign-up-form.tsx
を変更してみましょう。
これで、useFormState
を利用して、簡潔に書くことができました。
useFormState
の第一引数には、action を、第二引数にはStateの初期値をとります。
第一引数の action の第一引数には、現在のStateを受け取り、第二引数には、formのデータを受け取ります。
例えば、下記のように書くことができます。
このため、action.ts を変更したというわけです。
チャレンジ💪
sgin-up, login に成功した時にToastを表示してみましょう。
まずは、Layout に Toaster
を追加します。
次に、action.ts
を変更して、sever action が成功したことがわかるようにします。
最後に、sign-up-form.tsx
に成功した時にToastを表示するように変更します。
同様の修正を login-form.tsx
にも行ってみましょう。
ここまでできたら、http//localhost:3000
にアクセスして、登録、ログインしてみてください。
toast が表示されるはずです。
まとめ
client component を使って、エラーの情報を画面に表示することができます。
また、useFormState Hook を利用することで、簡潔に書くことができます。