- HOME >
- Jamstack用語集 >
- useContext
useContext
ユーズコンテクスト
useContext を分かりやすく
想像してみてください。あなたが喧騒の中にいるバーテンダーで、全ての客にオーダーを聞きに行く代わりに、各テーブルにインターコムを設置し、客が自分でオーダーを伝えられるようにしました。useContextはこのインターコムのようなものです。それはReactのコンポーネントツリー全体で情報を共有する手段を提供します。
コンポーネント間でのプロップの受け渡しを最小限に抑えつつ、グローバルに利用できる値を提供する手法がuseContextです。それにより、コードの冗長性を排除し、よりクリーンでメンテナブルなコードを書くことが可能になります。
useContext の歴史的変遷
React の Hooks は 2018 年の React 16.8 バージョンで導入され、それ以降、useContext も広く使われるようになりました。それまで、React の Context API は存在していましたが、利用するためにはクラスコンポーネントを用いる必要があり、コードが複雑になりがちでした。
しかし、useContext の導入により、Context API を関数コンポーネントでも利用できるようになり、コードの見通しが良くなりました。
useContext と Jamstack の関係
Jamstack は JavaScript、API、Markup の略で、Web 開発の新しいパラダイムを表しています。この中の JavaScript 部分が、React などのフロントエンドフレームワークに相当します。
useContext は、Next.js のような React ベースのフレームワークを使用する Jamstack アプリケーションで、グローバルな状態を管理するための優れた手段となります。
useContext を使うメリット
状態の共有
大規模なアプリケーションでは、状態を多くのコンポーネント間で共有する必要があります。useContext を使用すると、これが容易になります。
コードのシンプリシティ
コードの中で多くのプロップをドリルダウンするのではなく、必要なコンポーネント
で直接アクセスできます。
リファクタリングの容易さ
必要な場所でのみデータにアクセスできるため、コードベースのリファクタリングが容易になります。
useContext を実装
では、useContext を使った具体的な実装を見ていきましょう。ここでは、アプリケーションのテーマ(light または dark)を管理する状態を作成します。
import { createContext, useState, useContext } from 'react'
type Theme = 'light' | 'dark'
type ThemeContextType = {
theme: Theme
toggleTheme: () => void
}
const ThemeContext = createContext<ThemeContextType | undefined>(undefined)
const ThemeProvider: React.FC = ({ children }) => {
const [theme, setTheme] = useState<Theme>('light')
const toggleTheme = () => {
setTheme((prevTheme) => (prevTheme === 'light' ? 'dark' : 'light'))
}
return (
<ThemeContext.Provider value={{ theme, toggleTheme }}>
{children}
</ThemeContext.Provider>
)
}
const useTheme = () => {
const context = useContext(ThemeContext)
if (context === undefined) {
throw new Error('useTheme must be used within a ThemeProvider')
}
return context
}
export { ThemeProvider, useTheme }
以上のコードは、アプリケーション全体でアクセス可能なテーマ情報とその切り替え機能を提供します。ThemeProvider
をルートコンポーネントにラップすることで、アプリケーションのどこからでも useTheme
フックを通じてテーマ情報にアクセスできます。
useContext を学ぶ
タイトル(リンク) | 説明 |
---|---|
React公式ドキュメンテーション: useContext | useContextの基本的な使用方法について解説しています。 |
useContext Hook を使用して React でグローバルな状態を作成する | useContext と useReducer を組み合わせて、Redux と似たグローバルな状態管理を実現する方法について詳しく説明しています。 |
useContextでコンテキストを使いこなす | より深く useContext を理解するための詳細なガイドです。 |