프로젝트/개인 프로젝트
[React + TypeScript + Firebase] 식단어때(How-about-the-diet) 테마 기능 추가
진기명기
2023. 5. 24. 07:15
✨ 테마 기능 추가 결과물
https://www.youtube.com/watch?v=EcK13z1zv7E&list=PLR8FoyenzZ0W097_SdzTomj8VL4s6R_nY&index=9
🥒 Light & Dark 모드 테마 변경
💡 Context API를 통해 테마 기능 코드 구현
💡 localStorage 이용하여 새로고침 시, 현재 적용되어 있는 테마 적용
💡useContext()를 통해 색 변경이 필요한 각 파일에 적용
🌽 상태값 기본 설정
const [isDarkMode, setIsDarkMode] = useState<boolean>(() => {
const localTheme = localStorage.getItem('theme')
return localTheme ? JSON.parse(localTheme) : true
})
✅ 테마의 상태값을 기본 설정할 때, 만약 localStorage에 'theme'의 값이 있을 경우,
parse를 통해 파싱 해서 값을 boolean으로 변경하여 가져오고, 없다면 기본값을 true로 설정
🫑 상태값 변경 저장
useEffect(() => {
localStorage.setItem('theme', JSON.stringify(isDarkMode))
}, [isDarkMode])
✅ isDarkMode의 상태값이 변경될 때마다 useEffect()를 통해 theme의 값을 localStorage에 저장
🥑 Context 생성
export const ThemeContext = createContext<ThemeContextType>({
isDarkMode: false,
toggleTheme: () => {}
})
✅ isDarkMode와 toggleTheme(테마 변경 버튼)을 포함하는 Context 객체인 ThemeContext 선언
🥬 자식 컴포넌트에 데이터 제공
return (
<ThemeContext.Provider value={{ isDarkMode, toggleTheme }}>
{props.children}
</ThemeContext.Provider>
)
✅ Context API를 사용하여 ThemeContext.Provider를 통해 자식 컴포넌트에 테마 데이터를 제공
👋🏻 마무리
'식단어때'에 추가 기능을 구현할 때, 테마 변경 기능을 제일 먼저 추가하고 싶었다.
테마 모드가 Light와 Dark로 총 2가지가 있어, '식단어때'의 사이트가 2개인 느낌이 들었기 때문에 단순한 이유로 결과물을 빨리 확인하고 싶었다.. 🥹
역시 CSS는 어렵고도 신비하다.. 적용하기도 너무 힘들고 😂
그래도 테마 기능까지 추가하니 뿌듯하다 🙌🏻