개발일지/React
[SkeletonUI] 데이터 로딩중 스켈레톤 UI 적용하여 사용자 경험 향상시키기
ayeongjin
2025. 3. 12. 01:18
🧑🎨 [SkeletonUI] 데이터 로딩중 스켈레톤 UI 적용하여 사용자 경험 향상시키기
이렇게 생긴 그림일기 디테일 페이지에 스켈레톤 UI를 적용하려고 한다.
스켈레톤 UI를 적용하면 단순히 스피너가 돌아가는 것보다 사용자가 어디에 어떤 내용이 뜰지 예측할 수 있도록 도와주며, 로딩 중 지루함을 덜어줄 수 있다.
직접 구현할 수도 있지만 react-loading-skeleton 라이브러리를 사용하면 더 간펀하게 스켈레톤 UI를 만들 수 있다.
1. react-loading-skeleton 설치하기
npm install react-loading-skeleton
설치 후 Skeleton 컴포넌트를 가져와서 사용할 수 있다.
2. Skeleton 기본 사용법
두가지 방법으로 크기를 지정할 수도 있고 부모 너비의 비율에 맞춰서 조정할 수도 있다.
- 특정 크기 지정
<Skeleton circle width={60} height={60} />
- 비율 기반 크기 설정
<Skeleton width="100%" height={25} />
3. 그림일기 디테일 페이지 스켈레톤 UI 적용
코드 구현
import Skeleton from "react-loading-skeleton";
export default function DiaryDetailSkeleton() {
return (
<div className="p-4 w-full h-auto rounded-3xl space-y-4">
{/* 일기 헤더 */}
<div className="p-4 w-full rounded-3xl h-auto bg-white">
<div className="flex w-full items-center space-x-3">
{/* 기분 아이콘 */}
<Skeleton circle width={60} height={60} />
<div className="flex flex-col h-auto w-full">
{/* 날씨 및 공개 상태 */}
<div className="flex flex-row space-x-2">
<Skeleton circle width={30} height={30} />
<Skeleton circle width={30} height={30} />
</div>
{/* 날짜 */}
<div className="w-full h-auto">
<Skeleton width="60%" height={20} />
</div>
</div>
</div>
{/* 제목 */}
<div className="space-y-2">
<Skeleton width="100%" height={25} />
</div>
</div>
{/* 그림일기 영역 */}
<div className="w-full h-48 bg-white rounded-3xl flex items-center justify-center">
<Skeleton width="90%" height="90%" />
</div>
{/* 일기 내용 */}
<div className="p-4 rounded-3xl bg-white">
<Skeleton width="80%" height={25} />
<Skeleton width="90%" height={25} />
<Skeleton width="70%" height={25} />
</div>
</div>
);
}
4. 결과
- react-loading-skeleton의 기본 애니메이션 효과 덕분에 반짝이는 듯한 효과가 나타나면서 로딩 중임을 직관적으로 알릴 수 있다.
- 실제 UI에서는 제목, 날짜, 기분 아이콘, 그림일기 영역, 다이어리 내용이 자연스럽게 자리 잡는 형태로 보이게 된다.