#16CouplingMedium

useDashboard — Mixed Concerns in One Hook

useDashboard — 서로 무관한 관심사를 한 hook에

useDashboard 안에 위젯 데이터, 사용자 환경설정, UI 상태(사이드바/검색 토글) 가 한 hook에 묶여 있습니다. 검색창만 여는 컴포넌트도 widget fetch 비용을 같이 부담하고, widget 자동 갱신이 일어나면 사이드바 토글만 쓰는 컴포넌트까지 리렌더.

할 일

관심사별로 hook 을 분리하세요:

  • useDashboardWidgets() — widgets, refresh
  • useUserPreferences() — sidebarCollapsed, dashboardLayout 같은 설정
  • useDashboardUI() — searchOpen, modalOpen 같은 일시적 UI 상태

각 hook은 독립적으로 마운트/언마운트 가능. 한 hook의 상태 변화가 다른 hook 의 consumer 에 영향 X.

좋은 fix

  • 도메인별로 hook 분리
  • 공유가 필요한 상태는 Context 로 (UI 상태) 또는 fetch 캐시로 (widgets)

안 되는 fix

  • 한 hook 안에서 state 만 묶고 wrapping (실제로는 그대로)
  • 분리는 했는데 useDashboard 가 내부에서 다 호출
Sandpack 로드 중…