ZSSkeleton & ZSSkeletonBox
로딩 상태를 시각적으로 표현하기 위한 스켈레톤 UI 컴포넌트입니다. ZSSkeleton은 기존 컴포넌트에 shimmer 효과를 적용하는 래퍼 컴포넌트이고, ZSSkeletonBox는 고정 높이의 박스 형태 스켈레톤 컴포넌트입니다. React Native Reanimated를 사용하여 부드러운 애니메이션 효과를 제공합니다.
ZSSkeleton
기존 컴포넌트를 감싸서 로딩 상태일 때 shimmer 효과를 적용하는 래퍼 컴포넌트입니다. isFetching prop을 통해 로딩 상태를 제어할 수 있습니다.
기본 사용법
import { ZSSkeleton, ZSText } from '@0610studio/zs-ui';
export default function App() {
return (
<ZSSkeleton isFetching={true}>
<ZSText typo="heading.1">로딩 중인 텍스트</ZSText>
</ZSSkeleton>
);
}
Props
| Prop | Type | Default | Description |
|---|---|---|---|
isFetching | boolean | undefined | 로딩 상태 여부. true일 때 shimmer 효과가 적용됩니다 |
style | StyleProp<ViewStyle> | undefined | 컨테이너의 추가 스타일 |
children | React.ReactNode | undefined | 스켈레톤 효과를 적용할 자식 컴포넌트 |
overlayColor | string | 테마 background.base | shimmer 효과의 오버레이 색상 |
특징
- 조건부 렌더링:
isFetching이false일 때는 자식 컴포넌트를 그대로 렌더링합니다 - Shimmer 애니메이션: 로딩 중일 때 좌우로 이동하는 shimmer 효과가 적용됩니다
- 테마 통합: 테마 시스템과 통합되어 기본 색상이 자동으로 적용됩니다
- 유연한 사용: 어떤 컴포넌트든 감싸서 스켈레톤 효과를 적용할 수 있습니다
ZSSkeletonBox
고정 높이의 박스 형태 스켈레톤 컴포넌트입니다. 항상 shimmer 효과가 적용되며, 다양한 크기와 스타일의 스켈레톤 박스를 만들 수 있습니다.
기본 사용법
import { ZSSkeletonBox } from '@0610studio/zs-ui';
export default function App() {
return (
<ZSSkeletonBox height={100} />
);
}
Props
| Prop | Type | Default | Description |
|---|---|---|---|
height | number | Required | 스켈레톤 박스의 높이 |
style | StyleProp<ViewStyle> | undefined | 박스의 추가 스타일 |
overlayColor | string | 테마 background.layer1 | shimmer 효과의 오버레이 색상 |
color | ViewColorOptions | 'neutral' | 박스의 배경색 (테마 팔레트 기반) |
배경색 옵션 (ViewColorOptions)
테마 팔레트 기반의 배경색을 사용할 수 있습니다:
layer1,layer2,neutral,baseprimary,primary.5,primary.10, ...,primary.100danger,danger.5, ...,danger.100warning,warning.5, ...,warning.100success,success.5, ...,success.100information,information.5, ...,information.100grey.5,grey.10, ...,grey.100
특징
- 고정 높이:
heightprop으로 정확한 높이를 지정할 수 있습니다 - 지속적인 애니메이션: 항상 shimmer 효과가 적용되어 로딩 상태를 명확하게 표현합니다
- 테마 통합:
ZSView를 기반으로 하여 테마 시스템과 완전히 통합됩니다 - 다양한 형태:
styleprop을 통해 원형, 둥근 모서리 등 다양한 형태로 커스터마이징 가능합니다
예제
ZSSkeleton 기본 사용
import { ZSSkeleton, ZSText } from '@0610studio/zs-ui';
import { useState } from 'react';
function MyComponent() {
const [isLoading, setIsLoading] = useState(true);
return (
<ZSSkeleton isFetching={isLoading}>
<ZSText typo="heading.1">로딩 중인 제목</ZSText>
</ZSSkeleton>
);
}