import { createContext, useContext, useEffect, useState, ReactNode } from 'react' interface ThemeContextType { isDark: boolean toggleTheme: () => void } const ThemeContext = createContext(undefined) export function ThemeProvider({ children }: { children: ReactNode }) { const [isDark, setIsDark] = useState(() => { // 从 localStorage 读取 const saved = localStorage.getItem('theme') if (saved) return saved === 'dark' // 默认跟随系统 return window.matchMedia('(prefers-color-scheme: dark)').matches }) useEffect(() => { // 更新 document class document.documentElement.classList.toggle('light', !isDark) document.documentElement.classList.toggle('dark', isDark) // 保存到 localStorage localStorage.setItem('theme', isDark ? 'dark' : 'light') }, [isDark]) const toggleTheme = () => setIsDark(!isDark) return ( {children} ) } export function useTheme() { const context = useContext(ThemeContext) if (!context) { throw new Error('useTheme must be used within a ThemeProvider') } return context }