React useFormStatus — フォーム送信状態を簡単に
react-domのuseFormStatusを使ってフォーム送信のローディング状態を処理する方法を学びます。送信ボタン、プログレスインジケーター、<form>内でのレンダリング要件を網羅。
Form Hooks
詳細な説明
useFormStatusによるフォーム状態管理
useFormStatus(react-domから)は親<form>の送信状態を提供します。フォーム送信中のローディング状態を表示する最もシンプルな方法です。
重要な要件
useFormStatusは<form>の内側にレンダリングされるコンポーネントから呼び出す必要があります。フォームコンポーネント自体では動作しません:
// 間違い -- 動作しない
function Form() {
const { pending } = useFormStatus(); // 常に { pending: false }
return <form action={action}>...</form>;
}
// 正しい -- <form>内でレンダリングされるコンポーネント
function Form() {
return (
<form action={action}>
<SubmitButton /> {/* ここでuseFormStatusが動作する */}
</form>
);
}
重要:react-domからインポート
他のHookとは異なり、useFormStatusはreactではなくreact-domからインポートします。これはDOMフォーム要素に固有であり、React Nativeなどの他のReactレンダラーには適用されないためです。
ユースケース
送信中のサブミットボタンの無効化、フォームでのローディングスピナーの表示、プログレスインジケーターの表示、組み込みローディング状態を持つ再利用可能なフォームコンポーネントの構築にuseFormStatusを使用します。React Server Actionsとよく組み合わせて使います。