Next.js 에서 next-themes 를 사용하여 theme 구현하기

질문이 있습니다.

의문이 가는 부분은 아래의 설명입니다.

------------------------------------------------------------------------------------

"use client" 를 작성해도,

next-themes 라이브러리를 사용하여

테마를 전환하는 UI 가 서버 사이드 렌더링(SSR) 또는 정적 사이트 생성(SSG) 시에

hydration mismatch 경고를 발생시킬 수 있습니다.


그 이유는 next-themes 라이브러리에서는 useTheme 훅을 사용하여, 테마를 가져오게 되는데,

이 훅은 클라이언트 전용 객체인 window 객체를 사용하고 있고,

서버에서는 useTheme 훅을 사용하여, 현재 테마를 가져올 수 없으며, 이 때문에 테마가 undefined 로 설정이 되기 때문이다.

이러한 이유로, 서버에서는 테마를 렌더링 할 수 없으므로,

클라이언트에서 마운트 된 후에만 테마 전환 UI 를 렌더링 할 수 있도록 해야 합니다.

------------------------------------------------------------------------------------

SSR 또는 SSG 에 hydration mismatch 경고가 발생하는 시점은,
useTheme 을 호출하는 컴포넌트가 SSR / SSG 렌더링일 경우에만 해당하는거 아닌가요?

어째서
useTheme 훅을 호출하는 곳에서 "use client" 를
작성하여 CSR 로 렌더링 하는데
서버에서는 window 객체를 참조하게 되는거죵?

예를 들어, ToggleThemeButton 컴포넌트에서
컴포넌트 상위에서 "use client" 를 작성하여

CSR 로 렌더링하고,
useTheme 훅을 호출하게 되는 시점은
window 객체를 참조할 수 있을텐데,

위의 설명에서는
"next-themes 라이브러리에서는 useTheme 훅을 사용하여, 테마를 가져오게 되는데"
이 시점이 도대체 언제인지 궁금합니다.

next-themes 라이브러리는 자체적으로 CSS 변수를 사용하여, 테마를 전환한다고 하는데,
이 때문에 테마가 변경되어도 CSS 파일을 다시 로드 할 필요가 없고,
CSS 변수의 값만 변경이 될텐데,
ToggleThemeButton 컴포넌트에서 "use client" 를 지정하게 되면,
서버에서 window 객체를 참조하게 될 일이 없지 않나용?

참조

next-themes
https://github.com/pacocoursey/next-themes

hydration mismatch 를 해결하는 방법에 대한 설명
https://github.com/pacocoursey/next-themes#avoid-hydration-mismatch

GitHub - pacocoursey/next-themes: Perfect Next.js dark mode in 2 lines of code. Support System preference and any other theme with no flashing

GitHub

GitHub - pacocoursey/next-themes: Perfect Next.js dark mode in 2 lines of code. Support System preference and any other theme with no flashing

다음 내용이 궁금하다면?

또는

이미 회원이신가요?

2023년 10월 11일 오후 2:03

댓글 2

함께 읽은 게시물

소프트웨어 개발 방법론의 역사

 • 

저장 1 • 조회 1,627


서버엔지니어의 시대적 고민

... 더 보기

주니어 개발자들이 읽으면 좋은 테크 아티클 모음📚

F-Lab 에서 주니어 개발자들이(사실 개발자라면 누구나) 보시면 좋을 아티클 모음을 공유해 주었네요! 검색엔진부터 비동기 처리, NoSQL 등 다양한 분야의 아티클들이 공유되어 있으니 관심있으신 분들은 보시면 좋겠습니다. F-Lab 에서 공유해주신 아티클 주제를 나열해보면 다음과 같습니다. 📌 구글이 직접 말하는 검색엔진의 원리 (tali.kr) 📌 검색 엔진은 어떻게 작동하는가 (xo.dev) 📌 네이버의 검색엔진의 특징과 알고리즘 (tistory.com) 📌 [네이버 블로그]네이버 검색의 원리 : 네이버 블... 더 보기

주니어 개발자들이 읽으면 좋은 테크 아티클 모음

F-Lab : 상위 1% 개발자들의 멘토링

주니어 개발자들이 읽으면 좋은 테크 아티클 모음

 • 

저장 156 • 조회 4,256


스토리북 9 출시 소식

... 더 보기

Storybook 9

Storybook Blog

Storybook 9

Next.js 프로젝트를 AWS EKS에 배포하며 배운 것들

... 더 보기

쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

product.kyobobook.co.kr

쿠버네티스를 활용한 클라우드 네이티브 데브옵스 | 존 어런들 - 교보문고

 • 

댓글 1 • 저장 25 • 조회 2,312