💡 usePathname - usePathname은 현재 URL 경로를 읽는 클라이언트 전용 훅이다. - usePathname은 클라이언트 쪽에서 관리를 하기 때문에, 페이지 이동시 리렌더링이 발생은 하지만, 컴포넌트 자체가 다시 생성은 되지 않아 위의 문제점을 해결할 수 있다.
💡 다른 해결 방안
client component로 ??
뭔가 가장 먼저 떠오른 방법은 LayoutProvider.tsx를 client 컴포넌트로 변경하는 방법이 떠올랐다. Segment 단위 서버 렌더링을 한다고 했으니 그러면 client 컴포넌트로 변경한다면 리렌더링만 발생하지 않을까 고민이 되었다.
⚠️근데 주의사항이 있었다. 현재 경로가 components / layout 폴더 안에 LayoutProvider가 있기 때문에, 클라이언트 컴포넌트로 바꾼다고 해서 app 라우팅 계층이 아니라 단순 Import 된 컴포넌트로 처리를 한다는 것이다.
이를 해결하기 위해서는 LayoutProvider를 app 폴더 경로로 옮겨야 한다. 하지만 폴더구조를 맞추기 위해서 위 방법은 택하지 않도록 하였다
정리
문제원인해결
페이지 이동 시 Header state 초기화
Segment 단위 서버 렌더링으로 LayoutProvider 재생성
usePathname() 사용
"use client"로도 해결 안 됨
_components 폴더는 라우트 계층 아님
LayoutProvider를 app 폴더로 이동 or Header를 root layout로 분리