React项目动态修改主题颜色的方案

 更新时间:2025年01月07日 09:50:54   作者:月月鸟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 为例,但是 scsscss 是一样的。

1.创建两个主题的文件

在src文件夹下创建theme文件夹,在这个文件夹下创建lightTheme.lessdarkTheme.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修改主题颜色的资料请关注脚本之家其它相关文章!

相关文章

  • React动画实现方案Framer Motion让页面自己动起来

    React动画实现方案Framer Motion让页面自己动起来

    这篇文章主要为大家介绍了React动画实现方案Framer Motion让页面自己动起来,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-10-10
  • react页面中存在多个input时巧妙设置value属性方式

    react页面中存在多个input时巧妙设置value属性方式

    这篇文章主要介绍了react页面中存在多个input时巧妙设置value属性方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • React高级概念之Context用法详解

    React高级概念之Context用法详解

    在React应用中,为了让数据在组件间共享,常见的方式是让它们以props的形式自顶向下传递,如果数据要在组件树不同层级共享,那么这些数据必须逐层传递直到目的地,Context如同管道,它将数据从入口直接传递到出口,使用Context能避免“prop-drilling”
    2023-06-06
  • 详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)

    详解React-Native解决键盘遮挡问题(Keyboard遮挡问题)

    本篇文章主要介绍了React-Native解决键盘遮挡问题(Keyboard遮挡问题),具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-07-07
  • React项目开发中函数组件与函数式编程关系

    React项目开发中函数组件与函数式编程关系

    函数组件和函数式编程究竟是什么关系呢?本文会围绕这个话题展开讲解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-11-11
  • 浅析React中的受控组件和非受控组件

    浅析React中的受控组件和非受控组件

    具体来说这是一种react非受控组件,其状态是在input的react内部控制,不受调用者控制。可以使用受控组件来实现。下面就说说这个React中的受控组件与非受控组件的相关知识,感兴趣的朋友一起看看吧
    2021-05-05
  • react-three/postprocessing库的参数中文含义使用解析

    react-three/postprocessing库的参数中文含义使用解析

    这篇文章主要介绍了react-three/postprocessing库的参数中文含义使用总结,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-05-05
  • react-native fetch的具体使用方法

    react-native fetch的具体使用方法

    本篇文章主要介绍了react-native fetch的具体使用方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • 关于antd tree和父子组件之间的传值问题(react 总结)

    关于antd tree和父子组件之间的传值问题(react 总结)

    这篇文章主要介绍了关于antd tree 和父子组件之间的传值问题,是小编给大家总结的一些react知识点,本文通过一个项目需求实例代码详解给大家介绍的非常详细,需要的朋友可以参考下
    2021-06-06
  • 详解如何使用React Redux实现异步请求

    详解如何使用React Redux实现异步请求

    这篇文章主要为大家详细介绍了如何使用React Redux实现异步请求,文中的示例代码讲解详细,具有一定的借鉴价值,有需要的小伙伴可以参考一下
    2025-01-01

最新评论