Client Only
Client Only
클라이언트 쪽에서만 콘텐츠를 렌더링할 때 사용하는 컴포넌트예요. SSR 환경에서 브라우저 전용 API를 안전하게 다룰 때 특히 유용해요.
출처: 문서
본문
사용법 (Usage)
import { ClientOnly, Skeleton } from "@chakra-ui/react"
<ClientOnly>
<ColorModeButton />
</ClientOnly>
예시 (Examples)
Fallback (대체 콘텐츠)
fallback prop을 사용하면 클라이언트 콘텐츠가 준비되는 동안 로딩 상태를 렌더링할 수 있어요.
Render Prop (권장)
컴포넌트가 브라우저 전용 API(window, document, localStorage 등)에 접근한다면 render prop 패턴을 사용해 서버 사이드 렌더링 문제를 방지할 수 있어요.
이 패턴은 브라우저 API에 접근하는 컴포넌트가 오직 클라이언트 쪽에서만 평가되도록 보장해서, hydration 불일치(hydration mismatch)와 서버 사이드 오류를 막아줘요.
서버 쪽에는 필요 없는 무거운 컴포넌트를 렌더링할 때도 사용할 수 있어요.
Direct Children (주의해서 사용)
컴포넌트를 children으로 직접 전달할 수도 있지만, 브라우저 API에 접근하는 컴포넌트는 주의해야 해요:
/* ❌ This may cause server-side errors */
<ClientOnly fallback={<Skeleton />}>
<ComponentThatUsesWindow />
</ClientOnly>
/* ✅ This is safe */
<ClientOnly fallback={<Skeleton />}>
{() => <ComponentThatUsesWindow />}
</ClientOnly>
Props
이러한 prop들을 ClientOnly 컴포넌트에 전달할 수 있어요.
더 알아보기 (Learn more)
Chakra UI의 ClientOnly 컴포넌트에 대해 더 자세히 알아보려면 공식 문서를 확인해 보세요.