next.js 使用tailwind.config.js时组件内的颜色不会更改

yr9zkbsy  于 2023-03-22  发布在  其他
关注(0)|答案(1)|浏览(173)

我需要做两个主题,我希望它能根据主题动态变化,我使用这两个主题“光”和“暗”,这就是我如何在我的组件内使用它
这是我的_app. js

export default function App(appProps) 
{
  return (
    <Context>
      <ContextProvider {...appProps}/>
    </Context>
  )
}

function ContextProvider({ Component, pageProps })
{
  const context = useContext(GlobalContext) ;

  const [prefs , setPrefs] = useState("");

  useEffect(() => 
  {
    setPrefs(context?.preferences);
  }, [context])

// here is my issue inside className

  return(
    <div className={`p-3 bg-${prefs?.theme}-primary h-screen`}> // prefs?.theme here is either "dark" or "light"
      <Component {...pageProps}/>
    </div>
  )
}

下面是我的tailwind.config.js:

/** @type {import('tailwindcss').Config} */

module.exports = {
  content: ["./src/**/*.{js,ts,jsx,tsx}"],
  theme: {
    extend: {},
    colors:
    {
      "dark":
      {
        "primary":  "#063159",
      },
      "light":
      {
        "primary":  "#grey"
      }
    }
  },
  plugins: [],
}

当我将bg-${prefs?.theme}-primary更改为bg-dark-primary时,它工作正常,但我需要它动态更改

sgtfey8w

sgtfey8w1#

Tailwind无法正常使用部分动态className
这行不通:

<div className={`bg-${prefs?.theme}`}>
</div>

Tailwind实际上不会生成预期的CSS,因为它是在构建时完成的,prefs?.theme的值直到运行时才能知道。
所以需要整体使用:

<div className={`p-3 h-screen ${prefs?.theme === 'dark' ? 'bg-dark-primary' : 'bg-light-primary'}`}>
</div>

希望这个有用。

相关问题