![見出し画像](https://assets.st-note.com/production/uploads/images/146454753/rectangle_large_type_2_e238c183f9aa1d7736596c4ae6744039.png?width=1200)
【完全保存版】ReactのContext APIについて学ぼう!
1 コンテキストAPIとは
コンテキストAPI(Context API)は、Reactの中でプロップ(props)を使わずに、コンポーネントツリー全体でデータを共有するための仕組みです。
![](https://assets.st-note.com/img/1720304094704-Dg1yA5GxVy.png?width=1200)
これにより、複数のコンポーネント間でデータをやり取りする際に、各コンポーネントにプロップを逐一渡す必要がなくなり、コードの可読性とメンテナンス性が向上します。
ちなみに、propで行う場合は下のようになります。
![](https://assets.st-note.com/img/1720304231656-QKL4zJVVeN.png?width=1200)
2 主要な概念
1 コンテキストの作成
createContext 関数を使ってコンテキストオブジェクトを作成します。
![](https://assets.st-note.com/img/1720304464191-QMZaFfueov.png?width=1200)
2 プロバイダ
Provider コンポーネントは、コンテキストの値を提供する役割を果たします。
ツリーのどの位置でも使用できますが、通常はアプリケーションの上位コンポーネントに置かれます。
![](https://assets.st-note.com/img/1720304561650-O5a1i84xWH.png?width=1200)
3 コンシューマ
Consumer コンポーネントや useContext フックを使って、コンテキストの値を利用します。
![](https://assets.st-note.com/img/1720304614667-ZyClYfkaCl.png?width=1200)
3 基本的な使い方
以下に、テーマを切り替えるためのコンテキストを作成し、使用する例を示します。
1 コンテキストの作成
![](https://assets.st-note.com/img/1720304714761-XKy0s5KTv4.png?width=1200)
ThemeContext というコンテキストを作成します。
2 プロバイダの作成
ThemeProvider コンポーネントは、ThemeContext.Provider を使ってコンテキストの値を提供します。
![](https://assets.st-note.com/img/1720304947579-iD5Rm57Bub.png?width=1200)
このコンテキストは、テーマに関するデータ(theme)と、テーマを切り替える関数(toggleTheme)を持ちます。
![](https://assets.st-note.com/img/1720305032750-vX4IaUjJvt.png?width=1200)
children をラップすることで、どのコンポーネントでもコンテキストの値にアクセスできるようになります。
3 コンシューマの使用
useContext フックを使って、ThemeContext から現在の値を取得します。
![](https://assets.st-note.com/img/1720305187086-GSYjIZtLEl.png?width=1200)
theme の値を表示し、toggleTheme 関数を呼び出してテーマを切り替えるボタンを提供します。
4 コンテキストAPIのメリット
1 グローバルな状態管理
アプリケーションのどこからでもアクセス可能な状態を作成できます。
2 プロップのドリリングを回避
コンポーネントツリーの深くにデータを渡す際に、プロップを逐一渡す必要がなくなります。
![](https://assets.st-note.com/img/1720305471964-fjwbR5MV8H.png?width=1200)
3 コードの可読性とメンテナンス性の向上
プロップの受け渡しが少なくなるため、コードがシンプルで理解しやすくなります。
5 コンテキストAPIの注意点
1 パフォーマンス
コンテキストの値が頻繁に変更される場合、多くのコンポーネントが再レンダリングされる可能性があるため、パフォーマンスに注意が必要です。
![](https://assets.st-note.com/img/1720305729747-68loSxHilP.png?width=1200)
2 適切な用途での使用
コンテキストAPIはグローバルな状態管理に便利ですが、すべての状態管理に使用するのではなく、適切な範囲で使用することが推奨されます。
サポートをしていただけたらすごく嬉しいです😄 いただけたサポートを励みに、これからもコツコツ頑張っていきます😊