Next.js 14 の App Router で `useContext` を適用し、`Provider` を `app/layout.js` に組み込む方法を解説します。アプリ全体でグローバルな状態を管理する手順を詳しく紹介します。
Next.js 14 の App Router では、アプリ全体で グローバルな状態管理 をする場合に useContext
を活用できます。
しかし、通常の React アプリと異なり、Provider
をどこに配置すればよいのか 迷うことがあります。本記事では、Provider
を app/layout.js
に適用し、アプリ全体で useContext
を使う方法を解説します。
React の useContext
は、コンポーネント間で 状態を共有するための仕組み です。
通常の props
を使った状態管理では、親から子へ値を渡す必要がありますが、
useContext
を使うことで、どのコンポーネントからでも状態にアクセスできます。
まずは、グローバルな状態を管理する Context
を作成します。
🔹 context/ThemeContext.js
を作成
JAVASCRIPTimport { createContext, useState, useContext } from "react"; const ThemeContext = createContext(); export function ThemeProvider({ children }) { const [theme, setTheme] = useState("light"); return ( <ThemeContext.Provider value={{ theme, setTheme }}> {children} </ThemeContext.Provider> ); } export function useTheme() { return useContext(ThemeContext); }
✅ ここでのポイント
createContext()
で ThemeContext
を作成ThemeProvider
で 状態 (theme, setTheme
) を管理useTheme()
を作成し、useContext(ThemeContext)
をラップして 簡単にアクセスできるようにする次に、作成した ThemeProvider
をアプリ全体に適用します。
🔹 app/layout.js
を修正
JAVASCRIPTimport "../styles/globals.css"; import { ThemeProvider } from "../context/ThemeContext"; export default function RootLayout({ children }) { return ( <html lang="ja"> <body> <ThemeProvider>{children}</ThemeProvider> </body> </html> ); }
✅ ここでのポイント
ThemeProvider
を layout.js
に適用し、アプリ全体で useContext
を使えるようにするchildren
を ThemeProvider
でラップすることで、全てのページ・コンポーネントが theme
にアクセス可能作成した ThemeContext
を使い、テーマの切り替えができるボタンを作成します。
🔹 components/ThemeToggle.js
JAVASCRIPT"use client"; import { useTheme } from "../context/ThemeContext"; export default function ThemeToggle() { const { theme, setTheme } = useTheme(); return ( <button onClick={() => setTheme(theme === "light" ? "dark" : "light")} style={{ background: theme === "light" ? "#fff" : "#333", color: theme === "light" ? "#000" : "#fff", }} > {theme === "light" ? "ダークモードに切り替え" : "ライトモードに切り替え"} </button> ); }
✅ ここでのポイント
useTheme()
を使って 現在のテーマ (theme
) と状態更新関数 (setTheme
) にアクセスonClick
で theme
を切り替え、ボタンのスタイルも変更最後に、ThemeToggle
をページに配置して動作を確認します。
🔹 app/page.js
JAVASCRIPTimport ThemeToggle from "../components/ThemeToggle"; export default function HomePage() { return ( <div> <h1>Next.js 14 の Provider 適用例</h1> <ThemeToggle /> </div> ); }
Next.js 14 の App Router では、Provider
を app/layout.js
に適用することで、
アプリ全体で useContext
を利用可能にできます。
📌 学んだこと
useContext
を使うことで、コンポーネント間でグローバルな状態を共有できるProvider
を layout.js
に適用すると、アプリ全体で useContext
が利用可能になるuse client
を指定したコンポーネント (ThemeToggle
) で useContext
を活用し、UI を動的に更新できるこの方法を活用し、Next.js 14 の グローバルな状態管理 をスムーズに実装しましょう!
回 | タイトル | リンク |
---|---|---|
第 1 回 | Page Router と App Router の違い | 詳 細 |
第 2 回 | App Router のルーティング | 詳 細 |
第 3 回 | App Router における Metadata の設定 | 詳 細 |
第 4 回 | OGP・Twitter 画像の自動設定 | 詳 細 |
第 5 回 | App Router における API ルートの基本 | 詳 細 |
第 6 回 | use server と use client の使い分け | 詳 細 |
第 7 回 | useContext の Provider の適用方法 | この記事 |
第 8 回 | next/link の基本と使い方 | 詳 細 |
第 9 回 | next/image の概要 | 詳 細 |
第 10 回 | next/navigation の使い方 | 詳 細 |
当サイトの情報は、一般的な参考情報として提供しております。
正確な情報の掲載に努めておりますが、その内容の正確性・完全性・最新性を保証するものではありません。
記事の内容をご利用の際は、ご自身の責任において判断し、必要に応じて専門家にご相談ください。
当サイトの情報の利用により生じたいかなる損害についても、一切の責任を負いかねますのでご了承ください。
※ 本ページでは、著作権法に基づき、適正な引用の範囲内でコンテンツを紹介しています。
オリジナルの情報は発信元をご確認ください。
もし問題がありましたら、こちら からお問い合わせください。