1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

 Reactの Context は、コンポーネントのツリー全体にデータを提供するための方法です。propsを使って手動でデータをコンポーネントの一つ一つに渡す代わりに、Contextを使用することでコンポーネントツリーのどの階層でもデータにアクセスできます。

ReactのContextが必要な理由:

 シチュエーション: ウェブアプリケーションを考えてみてください。このアプリには、多くのコンポーネントがあり、それらがネストされて複雑な構造を持っています。ユーザーがアプリにログインすると、そのユーザー情報(名前、プロフィール写真、設定など)が多くのコンポーネントで必要になります。

  • 問題: このユーザー情報を、上位のコンポーネントから下位のコンポーネントへとpropsを使って一つ一つ渡していくのは、非常に手間がかかり、管理が難しくなります。このような手法を「prop drilling」と呼びます。

  • 解決策: ここでContextが役立ちます。Contextを使うと、ユーザー情報をアプリケーションのどこからでも直接アクセスできるようになります。つまり、中間のコンポーネントを経由せずに、必要な情報を直接取得できるのです。

具体的な利点:

  • コードのシンプルさ: 中間のコンポーネントが不要なデータを持たなくなるため、コードがシンプルになります。
  • 再利用性: 各コンポーネントが独立してデータにアクセスできるため、他の場所で再利用するのが容易になります。
  • 一貫性: データのソースが一箇所に集約されるため、データの不整合やバグを防ぐことができます。

Contextの使用方法:

  • Contextの作成: React.createContextを使用してContextを作成します。
  • Providerの使用: 作成したContextのProviderコンポーネントを使用して、データを提供するコンポーネントツリーをラップします。
  • データの利用: useContext HookやContext.Consumerを使用して、データを必要とするコンポーネントでデータを取得します。

簡単な例:

import React, { useContext } from 'react';

// 1. 新しいContextを作成します。これはテーマ情報('light'や'dark'など)を持つことを想定しています。
const ThemeContext = React.createContext('light');

function App() {
  return (
    // 2. ThemeContext.Providerを使って、内部のコンポーネントにテーマ情報を提供します。
    // この例では、全体のテーマを'dark'に設定しています。
    <ThemeContext.Provider value="dark">
      <Toolbar />
    </ThemeContext.Provider>
  );
}

function Toolbar() {
  // Toolbarコンポーネントはテーマ情報を直接使用しませんが、内部のButtonコンポーネントがそれを使用するため、
  // ThemeContextの情報を受け取ることができます。
  return <Button />;
}

function Button() {
  // 3. useContextを使って、現在のテーマ情報を取得します。
  const theme = useContext(ThemeContext);
  // 取得したテーマ情報を使って、ボタンのラベルを表示します。
  return <button>{theme}テーマのボタン</button>;
}

 この例では、ThemeContextという名前の新しいContextを作成しています。このContextは、アプリケーションのテーマ情報(例えば 'light' または 'dark')を保持します。
 React.createContextに渡された'light'は、このContextのデフォルト値です。つまり、もしThemeContextを使用するコンポーネントがどのThemeContext.Providerの内部にも存在しない場合、このデフォルト値が使用されます。

 このように、Contextを使用することで、親コンポーネントから子コンポーネントへと、直接的な関係なくデータを渡すことができます。

実例:

考えられる実際の使用例としては、以下のようなシチュエーションがあります:

  • テーマ設定: ユーザーがアプリのカラーテーマ(ダークモードやライトモードなど)を選択できる場合、その設定をアプリ全体で利用するためにContextを使用します。
  • 言語設定: 多言語対応のアプリでは、選択された言語に基づいてテキストを表示するためにContextを利用します。
  • 認証: ユーザーのログイン状態や権限に応じて、特定の機能を制限するためにContextでユーザー情報を管理します。

まとめ

  • 何ができるのか: ReactのContextは、コンポーネント間でデータを効果的に共有するための手段を提供します。これにより、データを手動でコンポーネントの階層を通して渡す必要がなくなります。

  • 主な用途: アプリケーションの設定、ユーザーの認証情報、言語設定、テーマなど、多くのコンポーネントで使われるデータや設定を扱います。

  • 使用方法: React.createContextで新しいContextを作成し、Context.Providerでデータを提供し、useContextやContext.Consumerでデータを取得します。

  • デフォルト値: Contextはデフォルト値を持つことができ、Providerが提供する値がない場合に使用されます。

  • 利点: Contextは「prop drilling」という問題を解決するのに役立ちます。これは、データを深くネストされた子コンポーネントに手動で渡す必要がある場合に発生する問題です。

  • 注意点: Contextを過度に使用すると、アプリケーションの構造が複雑になる可能性があります。適切な場面でのみ使用することが推奨されます。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?