【发布时间】:2021-03-23 00:58:53
【问题描述】:
每当程序注意到主题时,我都会尝试使用 setState 更改值 currentTheme,这是存储在 App.js 中的状态更改为特定值。我收到此错误:
Error: Too many re-renders. React limits the number of renders to prevent an infinite loop.
不太确定在这里做什么,任何帮助将不胜感激。提前致谢!
import React, { useState } from "react";
import styled from "styled-components";
import Editor from "./Editor";
import { monokai, solarizedDark, terminal, textmate } from "./ui/themes";
const CodeContainer = ({ setHtml, setCss, setJs, setRenderDoc, theme }) => {
const [currentTheme, setCurrentTheme] = useState(monokai);
if (theme === "textmate") {
setCurrentTheme(textmate);
} else if (theme === "solarized_dark") {
setCurrentTheme(solarizedDark);
} else if (theme === "terminal") {
setCurrentTheme(terminal);
} else {
setCurrentTheme(monokai);
}
return (
<Container style={currentTheme}>
<Editor
setHtml={setHtml}
setRenderDoc={setRenderDoc}
languageName="html"
theme={theme}
/>
<Editor
setCss={setCss}
setRenderDoc={setRenderDoc}
languageName="css"
theme={theme}
/>
<Editor
setJs={setJs}
setRenderDoc={setRenderDoc}
languageName="javascript"
theme={theme}
/>
</Container>
);
};
export default CodeContainer;
const Container = styled.div`
height: 40vh;
border-bottom: 4px #211e1c solid;
display: flex;
align-items: center;
justify-content: space-between;
padding: 12px 15px;
`;
【问题讨论】:
-
你需要将你的 if 语句包装在一个监听你的主题的 useEffect 中,以避免在每次渲染时运行 setCurrentTheme。
标签: javascript reactjs frontend rendering use-state