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
질문이 있습니다.
의문이 가는 부분은 아래의 설명입니다.
------------------------------------------------------------------------------------
"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
다음 내용이 궁금하다면?
이미 회원이신가요?
2023년 10월 11일 오후 2:03
안녕하세요 주강님, 좋은 질문 올려주셔서 감사합니다 ㅎㅎ 이렇게 질문이 있는 경우 개발자 Q&A에 올려 주시면 더 많은 답변을 받으실 수 있는데요, 혹시 이 내용을 개발자 Q&A에 질문으로 올려 보시는 건 어떨까요?? 개발자 Q&A 바로가기 -> https://careerly.co.kr/qnas
@김은서 넵 알겠습니다 좋은 정보 감사합니당!
최
... 더 보기사용자 모으니 매출안난다고 난리
... 더 보기