SHOEISHA iD

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

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

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

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

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

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

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

 useはPromiseやContextなどのリソースから値を読み取るための新しいAPIです。現時点では、useに指定できるリソースはPromiseかContextのいずれかです。Contextのほうが直感的なため、先にそちらから見ていきましょう。

useでContextを読み取る

 ContextはReactで状態管理を行う仕組みの一つで、祖先コンポーネントで指定された値を、子孫コンポーネントで参照できるようにする機構です。典型的には「UI テーマ」など、広範囲に影響を与える変数で、propsで受け渡すと煩雑になる状態管理に使われます。ただしグローバル変数に近いものなので、乱用は禁物です。

 これまで子孫コンポーネントでContextの値を読み取るには、useContextフックを使ってきましたが、これをuseで置き換えることができます。

[リスト3]useContextでContextを読み取る例 ※ファイル名:03_react19-use-context/src/index.jsx
// テーマコンテキスト
const ThemeContext = createContext("light");
// テーマを変更するコンポーネント
function ThemeChanger() {
  const [theme, setTheme] = useState("light");
  return (
    <div>
      <button onClick={() => setTheme((prev) => (prev === "light" ? "dark" : "light"))}>
        テーマ変更
      </button>
      <ThemeContext value={theme}>
        <ThemeDisplay />
      </ThemeContext>
    </div>
  );
}
// テーマを使用するコンポーネント
function ThemeDisplay() {
  // const theme = useContext(ThemeContext); // 従来の useContext を使った書き方 ... (1)
  const theme = use(ThemeContext); // React 19~の use を使った書き方 ...(2)
  return <p>テーマ: {theme}</p>;
}
function App() {
  return <ThemeChanger />;
}

 上の例ではuseContextを使った書き方((1))をuseを使った書き方((2))に置き換えています。いずれも同じように動作します。

 フックであるuseContextは、必ずコンポーネントの直下で呼び出す必要があり、if文などに含めたり、早期リターンの後には書けませんでした。useはいわゆる「フック」ではなく、if文やループなどの中でも呼び出すことができます

 リスト4のように、useは早期リターンの後でも使えるため、記述の自由度が高くなります。このため、今後はuseを使うことが推奨されています。

[リスト4]useでは早期リターンもOK
// テーマを使用するコンポーネント
function ThemeDisplay() {
  if (someCondition) {
    return null; // 早期リターン
  }
  const theme = use(ThemeContext); // 早期リターン後は、useContextはNGだが、useならOK
  return <p>テーマ: {theme}</p>;
}

 なお、これまでContextでは<Context.Provider>を使って下層のコンポーネントに適用していましたが、React 19からは<Context>を直接指定するように変更されました。従来の<Context.Provider>は将来のバージョンで非推奨になる予定のため、注意が必要です。

[リスト5]React 19以降のContextの使い方
const ThemeContext = React.createContext("light");
function App() {
  return (
    // <ThemeContext.Provider value="dark"> {/* React 18 までの書き方 */}
    //   <ThemeDisplay />
    // </ThemeContext.Provider>
    <ThemeContext value="dark"> {/* React 19 以降の書き方 */}
      <ThemeDisplay />
    </ThemeContext>
  );
}

useでPromiseの値を読み取る

 もう一つのuseの用法が、Promiseを渡して、その結果を読み取ることです。「awaitすればいいのでは?」と思われるかもしれませんが、通常の関数コンポーネントは同期関数のため、直接的にawaitは使用できません。useの導入により、関数コンポーネント内でPromiseから結果を取り出せるようになります。

 useはReact 18から導入されたSuspenseの仕組みを前提としており、渡されたPromiseが未解決の間、useはSuspendします。つまり、このuseを有効に使うためには、コンポーネントの上層でSuspenseが存在しなければなりません。

[リスト6]useでPromiseの値を読み取る例 ※ファイル名:05_react19-use-promise/src/data-component.jsx
import { use, Suspense } from "react";

function DataDisplay({ dataPromise }) {
  // useを使ってPromiseからデータを取り出す
  // ※Promiseが未解決の間は中断されてSuspenseのフォールバックが表示される
  const dataContent = use(dataPromise);
  return <p>データ: {dataContent}</p>;
}

export function DataContainer({ dataPromise }) {
  return (
    // Promiseが未解決の間はフォールバックが表示される
    <Suspense fallback={<p>読み込み中...</p>}>
      <DataDisplay dataPromise={dataPromise} />
    </Suspense>
  );
}

まとめ

 今回はReact 19の新しいAPIについて紹介しました。前回のuseActionStateフックや<form>アクションに加え、useOptimisticuseFormStatusフック、useといった新しく便利なAPIが追加されていました。

 次回はReact 19で正式にサポートされたReact Server Componentsやその他の変更点について紹介していくので、ご期待ください。

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

  • 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」など、さまざまなカンファレンスを企画・運営しています。

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

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

メールバックナンバー

アクセスランキング

アクセスランキング