themeRefect
테마 관련 문제점 분석
문제점
해결법
리팩토링 결과 반영
테마 리팩토링 이전 코드
import { useState } from "react";
import Head from "next/head";
import WithAuth from "./WithAuth";
import NavBar from "../components/Nav/NavBar";
/**컴포넌트와 navbar의 영역을 분할하고, 전체 컴포넌트의 렌더링을 통제하기 위한 역할*/
const Layout = ({ children }: LayoutProps) => {
const [isDarkMode, setIsDarkMode] = useState(false);
const router = useRouter();
const routes = ["/join", "/login"];
const isShowNav = routes.includes(router.asPath);
const handleToggleTheme = () => {
const newMode = !isDarkMode;
setIsDarkMode(newMode);
localStorage.setItem("theme", JSON.stringify(newMode));
};
//유저의 브라우저에 저장된 테마를 반영하기위한 역할
useEffect(() => {
const storageTheme = localStorage.getItem("theme");
if (storageTheme) {
const isThemeMode = JSON.parse(storageTheme);
if (isThemeMode !== isDarkMode) {
setIsDarkMode(isThemeMode);
}
}
}, []);
return (
<ThemeProvider theme={isDarkMode ? darkTheme : lightTheme}>
@@ -68,10 +53,7 @@ const Layout = ({ children }: LayoutProps) => {
</Head>
<LayoutStyle>
<Sidebar>
<NavBar
toggleTheme={handleToggleTheme}
mode={isDarkMode}
/>
</Sidebar>
<Content>{children}</Content>
</LayoutStyle>테마 리팩토링 이후
테마 리팩토링 결과
Last updated