[2025.03.19 수요일]
[Next.js 개인과제 - 트러블슈팅]
next-themes 라이브러리를 사용하여 구현하였다. 오~ 생각보다 쉽게 모드구현이 되서 라이브러리가 좋구만! 하고있었는데, 새로고침을 하고 나니까 화면 가능 에러가 표출!
Hydration failed 라고나오면서, 콘솔창에도 오류가 발생하였다.

이게 대체 무슨 오류이지?
에러 관련 하여 next.js 공식문서에서 제공하는 부분이 있어서 먼저 살펴보았다.
<ThemeProvider attribute="class" defaultTheme="light"> 코드를 수정해 주었으나, 동일한 오류가 발생하였다.suppressHydrationWarning={true} 속성을 주었지만, 여전히 오류 발생.위와같은 오류가 발생하는 환경을 확인할 수 있게 되었다.
그래서 마운트값을 적용해보기로 하였다.
해당 테마를 설정중인 컴포넌트에 아래와 같은 코드를 추가
const [mounted, setMounted] = useState(false);
useEffect(() => {
setMounted(true);
}, []);
이 경우에도 여전히 결과가 같았다.
강력새로고침, 캐시를 비우고 빌드.. 모두 오류가 표출되었다.
라이브러리를 버려야 하나? 좀더 방법을 찾아봐야하나?
suppressHydrationWarning 속성도 추가해보았다. 혹시!? 하면서..여전히 동일한 오류가 발생하였다.suppressHydrationWarning 는 one level deep에서만 작동한다는 문구가 있어서 해당 속성의 위치를 바꿔 보았다.suppressHydrationWarning 속성을 지웠는데, 왜 안되죠?suppressHydrationWarning 속성을 주어서 해결이 되었다. 이게 맞는건가? 좀 찜찜한 해결이 되었다.<html lang="ko" suppressHydrationWarning>
<body className={`${pretendard.variable} font-pretendard`} suppressHydrationWarning>
<ThemeProvider attribute="class" defaultTheme="light">
{children}
</ThemeProvider>
</body>
</html>
