Next.js 프로젝트에서 상태 관리를 Zustand로 하면서, 로그인 상태에 따라 <Header />
컴포넌트 안의 버튼을 다르게 보여주고자 했다. 그리고 추후에는 관리자 여부로도 UI가 변경될 부분이라 선으로 작업을 해두려고 했다.
Zustand
의 상태는 CSR인 클라이언트 전용이기 때문에 SSR 시점에는 존재하지 않는다.
그런데 다음과 같이 CSR 기반 조건을 SSR에서 평가하게 되면, 서버와 클라이언트의 렌더링 결과가 달라져 mismatch 발생하게 된다.
const isLoggedIn = !!userInfo?.userName
<div onClick={() => {
window.location.href = isLoggedIn ? '/main' : '/login'
}}