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とよく組み合わせて使います。

試してみる — React Hooks Reference

フルツールを開く