diff --git a/crop-x/src/components/layouts/ThemeToggle.tsx b/crop-x/src/components/layouts/ThemeToggle.tsx index a8ec170..95adbe5 100644 --- a/crop-x/src/components/layouts/ThemeToggle.tsx +++ b/crop-x/src/components/layouts/ThemeToggle.tsx @@ -1,14 +1,37 @@ +'use client'; + import { Moon, Sun } from 'lucide-react'; -import { useTheme } from '../../hooks/useTheme'; +import { useTheme } from 'next-themes'; import { Button } from '../ui/button'; +import { useEffect, useState } from 'react'; export function ThemeToggle() { const { theme, setTheme } = useTheme(); + const [mounted, setMounted] = useState(false); + + // 避免服务端渲染和客户端渲染不匹配 + useEffect(() => { + setMounted(true); + }, []); const toggleTheme = () => { setTheme(theme === 'light' ? 'dark' : 'light'); }; + // 在组件挂载前不渲染,避免闪烁 + if (!mounted) { + return ( + + ); + } + return (