【发布时间】:2020-06-14 22:18:33
【问题描述】:
我想用 Ant design v4 实现在深色/浅色主题之间动态切换。
可以使用其他 CSS/LESS 导入自定义主题,如下所示: https://ant.design/docs/react/customize-theme#Use-dark-theme
但我不确定如何从代码中动态切换这些主题。我的 React 应用程序 (darkMode) 中有一个变量,它指示当前是否使用深色主题。更改此变量时,我必须提供正确的 CSS 文件。但是我不能仅在满足某些条件时才动态导入 CSS,因为这不是导入的工作方式。
我试图用require 做一些乱七八糟的事情,就像下面的代码一样,但这是一个非常非常糟糕的方法,它仍然不能正常工作(因为 CSS 被注入但可能没有被撤回。
):
const Layout = () => {
...
useEffect(() => {
if (darkMode === true) {
require("./App.dark.css")
} else {
require("./App.css")
}
}, [darkMode])
return (
<Home />
)
}
应该可以以某种方式切换主题,因为它已经在 Ant 设计文档 (https://ant.design/components/button/) 中实现:
你知道怎么做吗?
谢谢!
【问题讨论】:
-
ant.design/components/button 的网站是开源的吗?我似乎无法在他们的存储库中找到它。他们的许多网站都是开源的。看看他们如何在自己的网站上实现这一点会非常有用。
-
对我来说最好的选择是使用 dev.to/maqi1520/… 中描述的 post-css 插件。它仅创建带有深色的附加 .dark 类。基本上,该类可以作为默认主题和深色主题之间的差异。编写工具组件很容易,并且没有客户端处理样式表(慢)或加载或切换时闪烁等缺点。它与custom-cra 兼容。需要注意的是构建存在问题 - 有时它会产生损坏的 css。试图解决这些。将添加评论。