【发布时间】:2021-03-07 20:30:16
【问题描述】:
我正在尝试使用一个按钮(传递给另一个组件)来切换暗模式。最初,我加载了一个轻主题样式表。然后,切换主题按钮应移除页面上最新加载的样式表,并将状态设置为与当前状态相反的状态。
我的理解是,useEffect 会“看到”状态变化并开始执行。这就是我们加载新样式表的地方。该应用程序正确加载了初始样式表,并且切换按钮可以正常工作一次,但在那之后就不行了。第一次更改后,它会删除所有样式。使用 react 开发工具,看起来状态正在正确更新。我认为我对 useEffect 和/或 useState 的理解是错误的。任何指针或帮助表示赞赏!
import { useState, useEffect } from "react";
import Navi from "./Components/Layout/Navi";
import Price from "./Components/Price";
import { BrowserRouter as Router, Route } from "react-router-dom";
import { Container } from "react-bootstrap";
import About from "./Components/About/About";
require("bootswatch/dist/cosmo/bootstrap.min.css");
function App() {
const [theme, setTheme] = useState("light");
const toggleTheme = () => {
Array.from(document.getElementsByTagName("style")).slice(-1)[0].remove();
setTheme(theme === "dark" ? "light" : "dark");
};
useEffect(() => {
console.log("fire");
console.log(theme);
if (theme === "light") {
require("bootswatch/dist/cosmo/bootstrap.min.css");
} else if (theme === "dark") {
require("bootswatch/dist/slate/bootstrap.min.css");
} else {
console.log("Theme state not correctly set");
}
});
return (
<Router path="/">
<>
<div className="App">
<Navi toggleTheme={() => toggleTheme()} />
<Container>
<Route path="/" exact component={Price} />
<Route path="/about" exact component={About} />
</Container>
</div>
</>
</Router>
);
}
export default App;
【问题讨论】:
标签: javascript css reactjs react-hooks