@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.pswp.cn/web/74058.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/74058.shtml
英文地址,請注明出處:http://en.pswp.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博客 如果你問…