reactjs - 如何在下一个 js 中动态更改全局样式表
问题描述
我有两个 CSS 文件,一个用于 Light 主题,另一个用于 Dark 主题。如何动态更改样式表?
这是我目前在 __app.js 中使用的代码
import React, { useState, useEffect } from "react";
import "../styles/globals.css";
import "primereact/resources/primereact.min.css";
import "primeicons/primeicons.css";
import { ThemeContext } from "../context/ThemeContext";
function MyApp({ Component, pageProps }) {
const [theme, setTheme] = useState("light");
useEffect(() => {
if (theme == "dark") {
import("primereact/resources/themes/arya-blue/theme.css");
}
if (theme == "light") {
import("primereact/resources/themes/saga-blue/theme.css");
}
}, [theme]);
return (
<ThemeContext.Provider value={[theme, setTheme]}>
<Component {...pageProps} />
</ThemeContext.Provider>
);
}
export default MyApp;
此代码正在从浅色主题切换到深色主题,但无法从深色切换到浅色。他们有更好的方法吗?
解决方案
light
问题是当从主题切换回主题时,dark
您的应用程序包含两个主题的dark
css light
。
我想到的一种解决方案是将主题状态存储在本地存储中,然后重新加载页面,就像这样
虽然它有一个缺点,即在主题更改后,您的网站会失去所有其他状态
import React, { useState, useEffect } from "react";
import "../styles/globals.css";
import "primereact/resources/primereact.min.css";
import "primeicons/primeicons.css";
import { ThemeContext } from "../context/ThemeContext";
function MyApp({ Component, pageProps }) {
const [theme, setTheme] = useState("light");
const currentTheme = localStorage.getItem("theme");
useEffect(() => {
localStorage.setItem("theme",theme)
window.location.reload();
}, [theme]);
if (currentTheme == "dark") {
import("primereact/resources/themes/arya-blue/theme.css");
}
if (currentTheme == "light") {
import("primereact/resources/themes/saga-blue/theme.css");
}
return (
<ThemeContext.Provider value={[theme, setTheme]}>
<Component {...pageProps} />
</ThemeContext.Provider>
);
}
export default MyApp;
推荐阅读
- r - 如何从 R 中的语料库中删除文本?
- wordpress - 如何修复 wordpress 中的响应式图像错误?
- python - 使用 psycopg2 获取具有键值的表中的值
- google-cloud-storage - 我可以手动触发 Google Cloud Storage 事件触发器吗?
- nginx - NGINX 无法加载站点
- r - 如何在 AKIMA 中使用 interp2xyz 修复插值中的缺失值
- swift - 无法从 ViewController 内的 UIAlertController 更新 ViewController
- excel - 列未正确合并。不覆盖空白列
- json - “重放”一个 HTTP 请求是什么意思?
- fullcalendar - Fullcalendar 4.0.1 中的多日事件未正确跨越 - 错误?