1. Create the Context (ThemeContext.js)
<aside> 💬
"use client"; // Required for hooks in Next.js App Router
import { createContext, useContext, useState, useEffect } from 'react';
const ThemeContext = createContext();
export function ThemeProvider({ children }) {
const [darkMode, setDarkMode] = useState(false);
// Toggle function
const toggleTheme = () => setDarkMode(!darkMode);
// Apply class to the body tag
useEffect(() => {
if (darkMode) {
document.documentElement.classList.add('dark');
} else {
document.documentElement.classList.remove('dark');
}
}, [darkMode]);
return (
<ThemeContext.Provider value={{ darkMode, toggleTheme }}>
{children}
</ThemeContext.Provider>
);
}
// Custom hook for easier access
export const useTheme = () => useContext(ThemeContext);
"use client";
import { useTheme } from './ThemeContext';
export default function Navbar() {
const { darkMode, toggleTheme } = useTheme();
return (
<nav className="p-4 flex justify-between bg-white dark:bg-gray-900">
<h1 className="text-black dark:text-white">LMS Dashboard</h1>
<button
onClick={toggleTheme}
className="px-4 py-2 rounded bg-blue-500 text-white"
>
Switch to {darkMode ? 'Light' : 'Dark'} Mode
</button>
</nav>
);
}
</aside>