Avoid This Server Component Mistake in React
use client를 파일 상단에 선언하면 해당 파일과 모든 import된 컴포넌트(서버 컴포넌트 포함)가 클라이언트 컴포넌트로 강제 변환되어 비효율적입니다. 🚫
useState와 같은 클라이언트 기능을 포함한 페이지 컴포넌트에 use client를 추가하면, 해당 페이지가 import하는 순수 서버 컴포넌트마저 클라이언트 컴포넌트가 됩니다. 📉
- 이상적으로는 페이지 컴포넌트와 순수 서버 컴포넌트는 서버에 유지하고, 클라이언트 기능만 클라이언트에 존재해야 합니다. 💡
- 이 문제를 해결하기 위해 클라이언트 로직(예:
useState 및 관련 코드)을 별도의 클라이언트 컴포넌트로 분리합니다. ✂️
- 분리된 클라이언트 컴포넌트는
use client를 선언하고, children prop을 받아 서버 컴포넌트를 자식으로 렌더링할 수 있도록 설계합니다. 🧩
- 이제 페이지 컴포넌트는 서버에 남고, 클라이언트 컴포넌트 내부에 서버 컴포넌트를 자식으로 전달하여 서버와 클라이언트 컴포넌트의 효율적인 조합이 가능해집니다. 🚀
- 결과적으로 페이지 컴포넌트와 서버 컴포넌트는 서버에서 실행되고, 필요한 클라이언트 로직만 클라이언트로 전송되어 애플리케이션 성능이 향상됩니다. ✅
데브허브 | DEVHUB | Avoid This Server Component Mistake in React