CHZZK-Study / Grass-Diary-Client

취지직 2팀 프로젝트 Grass Diary
1 stars 3 forks source link

✨ feat: 다크 모드 구현 #211

Open ccconac opened 1 month ago

ccconac commented 1 month ago

✅ 체크리스트

📝 작업 상세 내용

모든 페이지 다크 모드 구현이 완료되었습니다. 설정 페이지에서 테마 변경 시 localStorage에 다크 모드 여부가 boolean 타입으로 지정되며 이 값을 기반으로 페이지의 테마가 변경됩니다.

/hooks/useTheme.ts

import { useState } from 'react';

const useTheme = () => {
  const localTheme = localStorage.getItem('theme');
  const [isDarkMode, setIsDarkMode] = useState(localTheme === 'dark');

  const setDarkMode = () => {
    setIsDarkMode(true);
    localStorage.setItem('theme', 'dark');
  };

  const setLightMode = () => {
    setIsDarkMode(false);
    localStorage.setItem('theme', 'light');
  };

  return { isDarkMode, setDarkMode, setLightMode };
};

export default useTheme;

/components/Layout/Layout.tsx

import useTheme from '@hooks/useTheme';

const Layout = () => {
  const { isDarkMode } = useTheme();

  return (
    <ThemeProvider theme={isDarkMode ? semantic.dark : semantic.light}>
      <Header />
      <Outlet />
      <Toast />
      <Modal />
      <SnackBar />
      <Footer />
    </ThemeProvider>
  );
};

export default Layout;

🚨 버그 발생 이유 (선택 사항)

설정 페이지에서 테마 변경 시 헤더의 색상이 곧바로 업데이트되지 않는 버그가 발생 중입니다. 새로 고침 시에는 정상적으로 작동하지 않지만 곧바로 반영되지 않는 문제가 있어 원인 파악 후 해결해 보겠습니다. 🥹

Sep-23-2024 17-20-27

🔎 후속 작업 (선택 사항)

모든 페이지에 다크 모드를 적용하느라 수정된 코드가 굉장히 많습니다. 또한, 급한 작업으로 인해 아이콘 등 누락된 부분이 있을 수 있어 추후 검토 및 부가 작업이 필요합니다. 🥲

스크린샷 2024-09-23 오후 5 16 13

🤔 질문 사항 (선택 사항)

📚 참고 자료 (선택 사항)

📸 스크린샷 (선택 사항)

✅ 셀프 체크리스트

이슈 번호: #206