【发布时间】:2023-01-22 05:10:54
【问题描述】:
有一个按钮可以切换暗模式和亮模式,所以我试图在localStorage 中保存它所处模式的状态。但是,当我尝试将状态更改为 React 函数内的任何状态时,它会无限调用该函数并给出此错误:
Uncaught Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
如何在不无限地重新渲染函数的情况下更改状态?
let localDark = localStorage.getItem("dark");
function Mode() {
const [dark, setDark] = useState(false);
const onClick = () => {
if (dark) {
setDark(false);
document.querySelector("body").classList.remove("dark");
} else {
setDark(true);
document.querySelector("body").classList.add("dark");
}
localStorage.setItem("dark", dark);
};
if (localDark !== null) {
localDark = JSON.parse(localStorage.getItem("dark"));
setDark(localDark); // this is what causes the error
// onClick();
}
return (
<div onClick={onClick} className="mode">
{dark ? <Light /> : <Dark />}
</div>
);
}
【问题讨论】:
-
你好!我对 React 不是很好,所以请对我所说的持怀疑态度,但我认为这是因为
dark和setDark直接相关。也许使用setDark(!dark)?我不确定。
标签: javascript reactjs jsx setstate