React项目动态修改主题颜色的方案
作者:月月鸟pt
这篇文章主要介绍了React项目动态修改主题颜色的方案,文中通过代码示例讲解的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
背景
因为公司是做办公软件的,所以需要适配明亮和暗黑的主题。
不推荐的方案
公司之前就是这种方案,费时费力。
就是在项目的根目录的 public 文件夹下创建一个 dark.css 文件,所有的黑暗样式在这个文件中。
切换主题的方法:
const getTheme = (isDark: boolean) => {
  const darkStyle: any = document.getElementById('darkTheme');
  
  if (!darkStyle) {
      var link = document.createElement('link');
      link.rel = 'stylesheet';
      link.type = 'text/css';
      link.id = "darkTheme"
      link.disabled = false;
      link.href = './dark.css';
      document.getElementsByTagName('head')[0].appendChild(link);
  }
  
  darkStyle.disabled = !!isDark;
}
推荐的方案
通过控制 css 变量来展示两种主题,方便简洁。
因为公司是使用的 less, 所以以下以 less 为例,但是 scss 和 css 是一样的。
1.创建两个主题的文件
在src文件夹下创建theme文件夹,在这个文件夹下创建lightTheme.less 和 darkTheme.less文件。
lightTheme.less
:root[data-theme="light"] {
    --primary-text-color: #FFFFFF;
    --primary-white-color: #2A2A2D;
    --primary-color: #3591F4;
    --text-color: #363A45; 
}
darkTheme.less
:root[data-theme="light"] {
    --primary-text-color: #FFFFFF;
    --primary-white-color: #2A2A2D;
    --primary-color: #3591F4;
    --text-color: #fff; 
}
2.在入口的处的 index.less 引入这两个文件
@import './theme/lightTheme.less'; @import './theme/darkTheme.less';
3.在入口处的tsx文件中,能获取到的主题的方法中,调用切换主题的方法
const getDarkTheme = (isDark: boolean) => {
    const root = document.documentElement;
    if (!isDark) {
      // 修改 data-theme 属性的值为 "light"
      root.setAttribute('data-theme', 'light');
      return
    }
    // 修改 data-theme 属性的值为 "dark"
    root.setAttribute('data-theme', 'dark');
}
getDarkTheme(theme)
使用例子
.btn {
    color: var(--primary-color);
}
总结
在react项目中,通过这种修改css变量的方法来动态的修改主题颜色。更加方便简洁,只需要在实际的使用中只写一个css变量就好。使得项目的样式文件更好的维护。
以上就是React项目动态修改主题颜色的方案的详细内容,更多关于React修改主题颜色的资料请关注脚本之家其它相关文章!
