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

함께 읽은 게시물

이직하고 싶을 때 보세요

... 더 보기

- YouTube

youtu.be

 - YouTube

작년에 읽은 34권의 책 중 가장 좋았던 책

2

... 더 보기

2024년에 밑줄 친 문장들

1nteger 🏄🏻‍♂️

2024년에 밑줄 친 문장들

 • 

저장 12 • 조회 1,604


토스에서 만든 FE 코드 지침서

h

... 더 보기

Frontend Fundamentals

frontend-fundamentals.com

Frontend Fundamentals

 • 

저장 43 • 조회 3,205


억울한 돼지



... 더 보기


🪄 플레이모어와 함께할 동료를 찾습니다

... 더 보기

플레이모어와 함께할 동료를 찾습니다 | Notion

playmoreai on Notion

플레이모어와 함께할 동료를 찾습니다 | Notion

 • 

저장 8 • 조회 3,798