【React.js/Next.js】React Hooks useContext 完全入門

React.js / Next.js

React Hooks の useContext ってどんな機能があるの?

今回は、React Hooks の中でも重要な useContext について、基本的な考え方や使い方、代表的なユースケースまでをわかりやすく解説します。

useContext とは?

 useContext とは、コンポーネントツリー内で共有されている値を参照するためのReactフックで、途中のコンポーネントが不要なpropsを受け取らないようにし、propsのバケツリレー(props drilling)を回避するために使われます。

下記のように、あるコンポーネントで使うデータを 親から孫コンポーネントまで渡す場合
親 → 子 → 孫とpropsをバケツリレー(props drilling)する必要があり途中のコンポーネントが不要なpropsを受け取ってしまう問題が発生 します。

App
 └─ Parent (props) // 親コンポーネント 
     └─ Child (props) // 子コンポーネント
         └─ GrandChild (props) // 孫コンポーネント 実際にpropsを使う

useContext の基本

useContext は単体では使えず、Contextオブジェクト が必要です

全体の流れ

  1. createContextContext を作る
  2. Provider で値を供給する
  3. useContext で値を受け取る

Context を作る

useContext で値を受け取る

Provider配下のすべてのコンポーネントが、この Providerのvalue にアクセスできるようになる

Providerで値を渡す

useContext で Providerのvalue を直接取得できる ※ログに”theme: dark“と表示される

useContext のその他ユースケース

認証情報(ログイン状態・ユーザー情報)

ログイン しているかどうかを アプリ全体で共有したい

Context を作る

Provider で状態を管理する

isLogin: !!useruser がある場合、ログインしていると判定する ※ !!true or false 判定

App全体を Provider で囲む

useContext で ログイン状態 を取得

useContext で ログイン状態・ユーザー情報の取得・表示

ログインしている場合 は、「ようこそ、Taro さん メール: taro@example.com ログイン中」と表示され、ログアウトしている場合 は、「ログインしてください」と表示される

言語設定(i18n)

  • 言語切替ボタン
  • 翻訳表示
  • 日付フォーマット

モーダル・ダイアログ制御

  • 「どこからでもモーダルを開きたい」
  • Header / Button / Page など複数箇所から操作

ユーザー設定・アプリ設定

  • 通知ON/OFF
  • 表示件数
  • レイアウト切替

まとめ

React Hooks の useContext  について、いかがでしたでしょうか?

useContext は、React.js において コンポーネント間で値を共有するための基本的な Hook で、テーマや認証情報、言語設定 など、アプリ全体で共有したい値 を扱うのに向いています。
propsのバケツリレー(props drilling)を避けつつ、シンプルに状態を共有できる点が大きなメリットです。

まずは基本的な使い方をしっかり押さえ、小さな コンポーネント から試しながら、少しずつ useContext に慣れていきましょう。

また公式でも 同じような機能を持つ use を「useContext よりも優先的に使用してください」と記載があるため、下記に use の記事も記載しましたので、use を使うようにしましょう。

【React.js/Next.js】React API use 完全入門
今回は、React 19 以降で利用できるようになった新しい React API の use について、仕組みや基本的な使い方、代表的なユースケースまでをわかりやすく解説しますuse とは?use は、Promise や Context な...

公式サイト

useContext

tachu × tachu

Laravel / React フルスタックエンジニア

Webエンジニア歴15年、フリーランス歴8年で、PHP / Laravel を中心に、
React.js / Vue.js を用いたフルスタックでのWeb開発をしています。

技術記事は Laravel / React / Web開発 を中心に書いています。

Webサービスの開発、既存システム改善、機能追加、技術相談、小規模な開発など、お気軽にご相談ください。

React.js / Next.js
シェアする

コメント

タイトルとURLをコピーしました