Browser 가 필요할 때
State, event, ref, browser API, third-party UI lib (Framer Motion, headless UI, React Hook Form). 이런 거 위해 file 맨 위에 'use client' 박아 Client Component 선언.
Directive 가 전염성
'use client' 가 file 과 그 import 다 적용. Directive 아래 import graph 에 있는 거 다 client bundle 일부. Tree 에서 가능한 한 낮게 둬.
판단 표
| 필요 | 위치 |
|---|---|
useState / useEffect / useRef | Client |
Event handler (onClick, onChange, onSubmit) | Client |
window, document, localStorage | Client |
| Third-party hook-based library | Client |
| Data 그냥 render | Server |
| Data fetching / DB query | Server |
| Secret read | Server |
| Heavy data shaping | Server |