You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Next.js项目暗黑模式切换按钮失效,仍依赖浏览器主题的问题求助

Next.js项目暗黑模式切换按钮失效,仍依赖浏览器主题的问题求助

我正在我的Next.js项目里实现暗黑模式功能,目前代码逻辑看起来没问题,但遇到了一个头疼的问题:切换按钮没法正确切换主题,还是跟着浏览器的系统主题走。下面是我当前的代码实现,麻烦帮我看看哪里出问题了!

我的Theme Store代码

import { create } from "zustand";

export const useThemeStore = create((set) => {
  let storedTheme = localStorage.getItem("theme");

  if (!storedTheme) {
    const systemPrefersDark = window.matchMedia(
      "(prefers-color-scheme: dark)"
    ).matches;
    storedTheme = systemPrefersDark ? "dark" : "light";
    localStorage.setItem("theme", storedTheme);
    document.documentElement.classList.toggle(storedTheme);
  }


  return {
    theme: storedTheme,
    toggleTheme: () =>
      set((state: { theme: string }) => {
        const newTheme = state.theme === "light" ? "dark" : "light";
        document.documentElement.classList.toggle("dark", newTheme === "dark");
        localStorage.setItem("theme", newTheme);
        // alert("Theme changed to " + newTheme);
        return { theme: newTheme };
      }),
  };
});

Tailwind配置文件(tailwind.config.ts)

import type { Config } from "tailwindcss";

export default {
  content: [
    "./src/pages/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/components/**/*.{js,ts,jsx,tsx,mdx}",
    "./src/app/**/*.{js,ts,jsx,tsx,mdx}",
  ],
  darkMode: "class", // Ensures dark mode works with manual toggle
  theme: {
    extend: {
      colors: {
        background: "var(--background)",
        foreground: "var(--foreground)",
      },
    },
  },
  plugins: [],
} satisfies Config;

切换按钮组件代码

<div className="sm:absolute  flex items-center gap-4 cursor-pointer">
  <Around
    toggled={theme === "dark"}
    onToggle={toggleTheme}
    className="h-full w-full text-3xl"
    duration={750}
  />
</div>

目前看起来一切逻辑都是对的——localStorage里的主题变量能正常保存,html标签上也能正确加上dark类,但就是切换按钮点了之后,主题不会跟着变,还是依赖浏览器的系统主题设置,这可太奇怪了!

备注:内容来源于stack exchange,提问作者Debanshu Panigrahi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.13 19:55:32