From b32fcdbbdc7f42c2333bea873077b9049c9e1383 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E7=BF=94?= Date: Mon, 23 Feb 2026 08:04:50 +0800 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E4=B8=BB?= =?UTF-8?q?=E9=A2=98=E5=88=87=E6=8D=A2=E5=8A=9F=E8=83=BD=EF=BC=8C=E7=BB=9F?= =?UTF-8?q?=E4=B8=80=E4=BD=BF=E7=94=A8=E6=98=8E=E4=BA=AE=E9=A3=8E=E6=A0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 从 Header 移除 ThemeToggle 组件 - 删除 theme-toggle.tsx 文件 - 简化 theme-context.tsx,只保留 light 主题~ --- src/components/layout/header.tsx | 26 ++++++-------- src/components/ui/theme-toggle.tsx | 44 ----------------------- src/contexts/theme-context.tsx | 56 +++--------------------------- 3 files changed, 14 insertions(+), 112 deletions(-) delete mode 100644 src/components/ui/theme-toggle.tsx diff --git a/src/components/layout/header.tsx b/src/components/layout/header.tsx index 1ac6b17..c03bd92 100644 --- a/src/components/layout/header.tsx +++ b/src/components/layout/header.tsx @@ -4,7 +4,6 @@ import { useState, useEffect, useCallback } from 'react'; import { Menu, X } from 'lucide-react'; import { motion, AnimatePresence } from 'framer-motion'; import { Button } from '@/components/ui/button'; -import { ThemeToggle } from '@/components/ui/theme-toggle'; import { COMPANY_INFO, NAVIGATION } from '@/lib/constants'; export function Header() { @@ -64,7 +63,7 @@ export function Header() { fixed top-0 left-0 right-0 z-50 transition-all duration-300 ease-out ${isScrolled - ? 'bg-[var(--color-bg-primary)]/80 backdrop-blur-xl border-b border-[var(--color-border-primary)] shadow-[0_4px_30px_rgba(0,217,255,0.1)]' + ? 'bg-white/95 backdrop-blur-xl border-b border-[#E2E8F0] shadow-sm' : 'bg-transparent' } `} @@ -93,8 +92,8 @@ export function Header() { relative px-3 py-1.5 text-sm font-medium transition-all duration-300 ${activeSection === item.id.replace('#', '') - ? 'text-[var(--color-tech-blue)]' - : 'text-[var(--color-text-secondary)] hover:text-[var(--color-tech-blue)]' + ? 'text-[#005EB8]' + : 'text-[#4A5568] hover:text-[#005EB8]' } `} > @@ -102,7 +101,7 @@ export function Header() { {activeSection === item.id.replace('#', '') && ( )} @@ -111,7 +110,6 @@ export function Header() {
- - - - setTheme('light')}> - - 浅色 - {theme === 'light' && } - - setTheme('dark')}> - - 深色 - {theme === 'dark' && } - - setTheme('system')}> - - 跟随系统 - {theme === 'system' && } - - - - ); -} diff --git a/src/contexts/theme-context.tsx b/src/contexts/theme-context.tsx index 1205d11..e82b27e 100644 --- a/src/contexts/theme-context.tsx +++ b/src/contexts/theme-context.tsx @@ -1,65 +1,17 @@ 'use client'; -import { createContext, useContext, useEffect, useState, type ReactNode } from 'react'; - -type Theme = 'light' | 'dark' | 'system'; +import { createContext, useContext, type ReactNode } from 'react'; interface ThemeContextType { - theme: Theme; - setTheme: (theme: Theme) => void; - resolvedTheme: 'light' | 'dark'; + theme: 'light'; + resolvedTheme: 'light'; } const ThemeContext = createContext(undefined); -const THEME_STORAGE_KEY = 'ruixin-theme'; - export function ThemeProvider({ children }: { children: ReactNode }) { - const [theme, setThemeState] = useState('system'); - const [resolvedTheme, setResolvedTheme] = useState<'light' | 'dark'>('light'); - - useEffect(() => { - const stored = localStorage.getItem(THEME_STORAGE_KEY) as Theme | null; - if (stored && ['light', 'dark', 'system'].includes(stored)) { - setThemeState(stored); - } - }, []); - - useEffect(() => { - const root = document.documentElement; - const mediaQuery = window.matchMedia('(prefers-color-scheme: dark)'); - - const updateTheme = () => { - let resolved: 'light' | 'dark'; - - if (theme === 'system') { - resolved = mediaQuery.matches ? 'dark' : 'light'; - } else { - resolved = theme; - } - - setResolvedTheme(resolved); - - if (resolved === 'dark') { - root.classList.add('dark'); - } else { - root.classList.remove('dark'); - } - }; - - updateTheme(); - - mediaQuery.addEventListener('change', updateTheme); - return () => mediaQuery.removeEventListener('change', updateTheme); - }, [theme]); - - const setTheme = (newTheme: Theme) => { - setThemeState(newTheme); - localStorage.setItem(THEME_STORAGE_KEY, newTheme); - }; - return ( - + {children} );