SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

フロントエンド開発における定番ライブラリ「React」の最新バージョン解説

フロントエンドの定番ライブラリ「React 19」の新機能を紹介──新しいAPI

フロントエンド開発における定番ライブラリ「React」の最新バージョン解説 第4回

  • X ポスト
  • このエントリーをはてなブックマークに追加

「アクション」に関連した新しいフック(2)

useFormStatusフック:フォーム内のコンポーネントで使える特殊なフック

 React 19でフォーム周りのAPIとして、もう一つ追加されたのがuseFormStatusフックです。

 このuseFormStatusはこれまで紹介してきたフックと異なり、従来の処理を大幅に改善するようなものではありません。使える場所も少々特殊で、<form>内に配置される子コンポーネント内でのみ使用できます。

 実際の使用例として、前回のサンプルをベースに、送信ボタンをコンポーネント化してuseFormStatusを使ってみましょう。なお、useFormStatusフックはreact-domからimportしてください。

[リスト2] useFormStatusの使用例 ※ファイル名:02_react19-data-update-useformstatus/src/index.jsx
// コンポーネント化した送信ボタン
function SubmitButton() {
  // useFormStatusで送信中状態と送信中のフォーム値を取得 ... (2)
  const { pending, data } = useFormStatus();
  const value = data?.get("title");
  return (
    <button type="submit" disabled={pending}>
      {value ? `${value} に更新中` : `更新`}
    </button>
  );
}
function UpdateTitle({ value, onUpdate }) {
  const [error, submitAction, isPending] = useActionState(
    // ~中略~
  );
  return (
    <form action={submitAction}>
      <input name="title" defaultValue={value} disabled={isPending} />
      {/* 必ず<form>内で使う ... (1) */}
      <SubmitButton />
      {error && <p>{error}</p>}
      <div>value: {value}</div>
    </form>
  );
}

 このサンプルを実行すると、送信中にボタンが無効になるだけでなく、ボタンの文字列に送信中の値(data?.get("title"))が表示されます。

useFormStatusを使った例
useFormStatusを使った例

 SubmitButtonコンポーネントが<form>内で呼び出されていることに注意してください((1))。このような場合にのみuseFormStatusフックが利用できます。

 useFormStatusフックは、フォームが送信中であるかどうかを示すpendingのほか、送信中の値をdataFormData型)で参照できるため、これらの値をpropsで受け渡す必要がなくなります((2))。

 注意が必要なのは、このdatapendingtrueの間、すなわちフォーム送信中のみ取得可能だということです(それ以外はnull)。あくまでフォーム送信処理中の表示を決定するためだけのものである点を覚えておきましょう。

次のページ
use:レンダー中にリソースを読み取る新しいAPI

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
フロントエンド開発における定番ライブラリ「React」の最新バージョン解説連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 山田 研二(ヤマダ ケンジ)

WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。個人紹介主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著者記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook<個人紹介>株式会社MSEN CTO。高校卒業後、大阪大学の研究所で働きながらプログラミングやWebデザインをはじめ、以後20年以上、Webサイト制作や業務システムの構築を手がけています。フリーソフトもいくつか公開しています。好きな言語はC#とTypeScript、趣味は旅行です。 GitHub アカウント

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/20822 2025/01/29 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング