@emotion/css + react+动态主题切换

1.下载插件

npm install --save @emotion/css

2.创建ThemeContext.tsx

// src/ThemeContext.tsx
import React, { createContext, useContext, useState } from "react";// 定义主题类型
export type Theme = "light" | "dark";// 定义主题上下文的类型
interface ThemeContextType {theme: Theme;toggleTheme: () => void;
}// 创建主题上下文
export const ThemeContext = createContext<ThemeContextType | undefined>(undefined);// 创建一个主题提供器组件
export const ThemeProvider: React.FC = ({ children }) => {const [theme, setTheme] = useState<Theme>("light"); // 默认主题为 'light'const toggleTheme = () => {setTheme((prevTheme) => (prevTheme === "light" ? "dark" : "light"));};return <ThemeContext.Provider value={{ theme, toggleTheme }}>{children}</ThemeContext.Provider>;
};// 创建一个自定义钩子来方便使用主题上下文
export const useTheme = () => {const context = useContext(ThemeContext);if (!context) {throw new Error("useTheme must be used within a ThemeProvider");}return context;
};

3.创建themeConfig.ts配置主题颜色文件

//themeConfig.ts
import { Theme } from "./ThemeContext";export const themes = {light: {backgroundColor: "#ffffff",color: "green",primaryColor: "#007bff",secondaryColor: "#6c757d",},dark: {backgroundColor: "#333333",color: "red",primaryColor: "#007bff",secondaryColor: "#6c757d",},
};export const getTheme = (theme: Theme) => themes[theme];

4.在app.tsx 挂载


import { ThemeProvider } from "@/theme/ThemeContext";const App = () => {return (<ThemeProvider><div>App<div></ThemeProvider>);
};export default observer(App);

6.使用直接写样式方式一

// @live
import { useEffect } from "react";
import { css, cx } from "@emotion/css";
import { useTheme } from "@/theme/ThemeContext";
import { getTheme } from "@/theme/themeConfig";
import "./index.less";
const ThemeBox: any = () => {const { theme, toggleTheme } = useTheme();const currentTheme = getTheme(theme);const styles = css`background-color: ${currentTheme.color};`;return (<div className={cx("cockpit-contain", styles)} onClick={toggleTheme}></div>);
};export default ThemeBox;

6.使用类名方式二

// @live
import { useEffect } from "react";
import { css, cx } from "@emotion/css";
import { useTheme } from "@/theme/ThemeContext";
import { getTheme } from "@/theme/themeConfig";
import "./index.less";
const ThemeBox: any = () => {const { theme, toggleTheme } = useTheme();const currentTheme = getTheme(theme);const styles = css`.background {background-color: ${currentTheme.background};}.boder-color {border-color: ${currentTheme.borderColor};}`;return (<div className={cx("cockpit-contain", styles)} onClick={toggleTheme}><div className={"background"}></div><div className={"boder-color"}></div></div>);
};export default ThemeBox;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/74058.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【信奥一本通提高篇】基础算法之贪心算法

原文 https://bbs.fmcraft.top/blog/index.php/archives/22/ 贪心算法 概述 近年来的信息学竞赛试题&#xff0c;经常出现求一个问题的可行解或最优解的题目。这类问题就是我们通常所说的最优化问题。贪心算法是求解这类问题的一种常用算法。在众多的算法中&#xff0c;贪心…

CentOS-7.0系统基础操作

配置ip地址 编辑网卡文件&#xff1a; vi etc/sysconfig/network-scripts/ifcfg-ens33 在网卡文件里参照如下设置&#xff1a; BOOTPROTO"static" IPADDR192.168.61.233 GATEWAY192.168.61.2 NETMASK255.255.255.0 ONBOOT"yes" 防火墙管理 开启防火墙&am…

【大模型应用】信息抽取的调研

老规矩&#xff0c;先占坑&#xff0c;后续更新。 关键词&#xff1a; Pydantic functioncal 参考文献&#xff1a;小白学大模型&#xff1a;自定义信息抽取Agent-CSDN博客

MySQL内存使用率高问题排查与解决方案:

目录标题 **一、问题现象****二、核心排查步骤****1. 参数检查****2. 内存使用分析****3. 存储过程/函数/视图检查****4. 操作系统级检查** **三、解决方案****1. 调整MySQL配置****2. 关闭透明大页&#xff08;THP&#xff09;****3. 优化查询与存储过程****4. 硬件与环境优化…

华为GaussDB数据库的手动备份与还原操作介绍

数据库的备份以A机上的操作为例。 1、使用linux的root用户登录到GaussDB服务器。 2、用以下命令切换到 GaussDB 管理员用户&#xff0c;其中&#xff0c;omm 为当前数据库的linux账号。 su - omm 3、执行gs_dump命令进行数据库备份&#xff1a; 这里使用gs_dump命令进行备…

How to install OpenJ9 JDK 17 on Ubuntu 24.04

概述 OpenJ9 是一款由 IBM 开发并开源的 Java 虚拟机&#xff08;JVM&#xff09;&#xff0c;现由 ​Eclipse 基金会管理&#xff08;名为 ​Eclipse OpenJ9&#xff09;。它旨在提供高性能、低内存消耗和快速启动时间&#xff0c;特别适用于云原生和容器化环境。 关键特性 …

洛谷题单1-P5705 【深基2.例7】数字反转-python-流程图重构

题目描述 输入一个不小于 100 100 100 且小于 1000 1000 1000&#xff0c;同时包括小数点后一位的一个浮点数&#xff0c;例如 123.4 123.4 123.4 &#xff0c;要求把这个数字翻转过来&#xff0c;变成 4.321 4.321 4.321 并输出。 输入格式 一行一个浮点数 输出格式 …

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建,并实现远程联机,详细教程

【云服务器】在Linux CentOS 7上快速搭建我的世界 Minecraft 服务器搭建&#xff0c;详细详细教程 一、 服务器介绍二、下载 Minecraft 服务端三、安装 JDK 21四、搭建服务器五、本地测试连接六、添加服务&#xff0c;并设置开机自启动 前言&#xff1a; 推荐使用云服务器部署&…

内网穿透_ZeroTiers部署_广和通SC171_aidlux_嵌入式

下载 sudo curl -s https://install.zerotier.com | sudo bash &#xff08;需要科学上网&#xff09; 所有涉及硬件的操作好像都需要 root 权限&#xff0c;curl 在这里需要连接网络&#xff0c;所以也需要 sudo sudo zerotier-cli status 若返回 200 info 及设备 ID&#xff…

Faster RCNN Pytorch 实现 代码级 详解

基本结构&#xff1a; 采用VGG提取特征的Faster RCNN. self.backbone:提取出特征图->features self.rpn:选出推荐框->proposals self.roi heads:根据proposals在features上进行抠图->detections features self.backbone(images.tensors)proposals, proposal_losses…

【Matlab】-- 基于MATLAB的美赛常用多种算法

文章目录 文章目录 01 内容概要02 各种算法基本原理03 部分代码04 代码下载 01 内容概要 本资料集合了多种数学建模和优化算法的常用代码资源&#xff0c;旨在为参与美国大学生数学建模竞赛&#xff08;MCM/ICM&#xff0c;简称美赛&#xff09;的参赛者提供实用的编程工具和…

Vue2和Vue3响应式的基本实现

目录 简介Vue2 响应式Vue2 响应式的局限性 Vue3 响应式Vue3 响应式的优点 Vue2 和 Vue3 响应式对比 简介 在 Vue 框架中&#xff0c;数据的响应式是其核心特性之一。当页面数据发生变化时&#xff0c;我们希望界面能自动更新&#xff0c;而不是手动操作 DOM。这就需要对数据进…

Linux系统中快速安装docker

1 查看是否安装docker 要检查Ubuntu是否安装了Docker&#xff0c;可以使用以下几种方法&#xff1a; 方法1&#xff1a;使用 docker --version 命令 docker --version如果Docker已安装&#xff0c;输出会显示Docker的版本信息&#xff0c;例如&#xff1a; Docker version …

ElasticSearch 分词器

文章目录 一、安装中文分词插件Linux安装7.14.1版本&#xff1a;测试1&#xff1a;ik_smart测试2&#xff1a;ik_max_word 二、es内置的分词器&#xff1a;三、拼音插件安装以及&#xff08;IKpinyin使用&#xff09;配置 IK pinyin 分词配置 一、安装中文分词插件 IK Analys…

arm64位FFmpeg与X264库

参考链接&#xff1a; https://blog.csdn.net/gitblog_09700/article/details/142945092

机器学习与深度学习4:数据集处理Dataset,DataLoader,batch_size

深度学习中&#xff0c;我们能看到别人的代码中都有一个继承Dataset类的数据集处理过程&#xff0c;这也是深度学习处理数据集的的基础&#xff0c;下面介绍这个数据集的定义和使用&#xff1a; 1、数据集加载 1.1 通用的定义 Bach&#xff1a;表示每次喂给模型的数据 Epoc…

MySQL数据库和表的操作之SQL语句

&#x1f3af; 本文专栏&#xff1a;MySQL深入浅出 &#x1f680; 作者主页&#xff1a;小度爱学习 MySQL数据库和表的操作 关系型数据库&#xff0c;都是遵循SQL语法进行数据查询和管理的。 SQL语句 什么是sql SQL&#xff1a;结构化查询语言(Structured Query Language)&…

ubuntu开发mcu环境

# 编辑 vim或者vscode # 编译 arm-none-eabi # 烧写 openocd 若是默认安装&#xff0c;会在/usr/share/openocd/scripts/{interface,target} 有配置接口和目标版配置 示例&#xff1a; openocd -f interface/stlink-v2.cfg -f target/stm32f1x.cfg 启动后&#xff0c;会…

Windows模仿Mac大小写切换, 中英文切换

CapsLock 功能优化脚本部署指南 部署步骤 第一步&#xff1a;安装 AutoHotkey v2 访问 AutoHotkey v2 官网下载并安装最新版本安装时勾选 "Add Compile Script to context menus" 第二步&#xff1a;部署脚本 直接运行 (调试推荐) 新建文本文件&#xff0c;粘贴…

Selenium Web自动化如何快速又准确的定位元素路径,强调一遍是元素路径

如果文章对你有用&#xff0c;请给个赞&#xff01; 匹配的ChromeDriver和浏览器版本是更好完成自动化的基础&#xff0c;可以从这里去下载驱动程序&#xff1a; 最全ChromeDriver下载含win linux mac 最新版本134.0.6998.165 持续更新..._chromedriver 134-CSDN博客 如果你问…