我目前正在开发一个将 Kendo React UI 用于图表的应用程序,并且我想添加从 UI 中在明暗之间切换主题的可能性。
我使用 React 和 Sass 进行造型和两个不同的 Kendo-React 主题,浅色是默认的 kendo 制作,深色是我使用 Kendo Theme Builder 制作的。
我试图通过纯 scss 实现主题更改:
.light {
@import '~@progress/kendo-theme-default/dist/all.scss'
}
.dark {
@import 'path/to/custom/theme.scss'
}
并在这两个类之间改变状态变化。
我试过使用 scss @mixin
:
具有主题样式的文件:
@mixin light {
...all properties and classes
}
应用程序.scss:
@import light;
.light {
@include light
}
我尝试使用具有两个链接并仅使用正确链接的 react-helmet:
<div>
<Helmet>
<link rel={isDark ? "stylesheet" : "stylesheet alternate"} href="path/to/custom/theme.scss"/>
<link rel={!isDark ? "stylesheet" : "stylesheet alternate"} href="path/to/default/kendo.scss"/>
</Helmet>
</div>
或有一个指向正确 scss 文件路径的链接:
<div>
<Helmet>
<link rel="stylesheet" href={isDark ? "path/to/custom/theme.scss" : "path/to/kendo/default.scss}/>
</Helmet>
</div>
我还尝试有条件地在 useEffect 中导入这些文件:
useEffect(()=>{
if(isDark) require('path/to/custom/theme.scss')
else require('path/to/kendo/theme.scss')
},[isDark]}
以上都没有奏效,有些没有进行任何更改,有些则将 UI 从空白页面更改为仅条形图系列的轮廓,没有任何颜色或样式。
显然,如果我尝试导入默认主题或我制作的主题而不尝试在运行时更改它,那么所有 2 都可以完美运行。
有人也遇到过这种情况吗?如何实现主题切换器?