Skeleton UI 실습

오늘도 삽질중·2023년 6월 28일
1

css

목록 보기
2/2
post-thumbnail

기존의 프로젝트에서 데이터를 불러와 기다리는 과정에 이용자의 이목을 끌 로딩처리가 필요하다고 느꼈다. 로딩바, 스피너 등 여러 로딩 처리 방식이 있었지만 사용자에게 실제 컨텐츠가 어떻게 표현될지를 대략적으로 예상할 수 있도록 보여주는 Skeleton UI를 접목 시키는것이 적합하다고 생각했고 이를 도입하기로 계획했다.


일단은 실습부터 하고~

✅ Skeleton UI

역시 말보단 보여주는게 이해가 빠르겠지!
이런걸 스켈레톤 UI라고 한다.

Skeleton UI란?
실제 데이터가 렌더링 되기 전에 보이게 될 화면의 레이아웃을 대략적으로 보여주는 로딩 애니메이션이다. 로딩중 사용자의 지루함을 덜어 페이지를 떠나는 확률을 줄여준다.

개인적으로 단어가 주는 진입장벽이 있다고 생각했었는데 실습해본 바, 로딩후 나오는 컴포넌트와 유사한 빈 껍데기 컴포넌트를 만들어 로딩 중인 상태에 빈껍데기 컴포넌트를 보여주면 그것이 바로 스켈레톤 UI이다.

전체 코드를 보면 좀 더 이해하기 쉬울텐데, isLoading이 false인 상태에는 스켈레톤 ui를 보여주고 isLoading이 true인 상태에는 데이터를 보여주는것.

import axios from "axios";
import React, { useEffect, useState } from "react";
import Skeleton from "./Skeleton";
import UserInfo from "./UserInfo";

function App() {
  const [data, setData] = useState([]);
  const [isLoading, setIsLoading] = useState(false);

  useEffect(() => {
    axios.get("https://reqres.in/api/users?page=2").then((response) => {
      setData(response.data.data);
      setTimeout(() => {
        setIsLoading(true);
      }, 2500);
    });
  }, []);

  return (
     <div>
      <ul className="Wrapper">
        <Skeleton />
        {!isLoading &&
          new Array(10).fill(1).map((_, i) => <Skeleton key={i} />)}
        {isLoading &&
          data.map((item) => <UserInfo key={item.id} item={item} />)}
      </ul>
    </div>
  );
}

export default App;


데이터를 넘겨받는 <UserInfo /> 컴포넌트는 아래와 같은 카드 형식의 모습을 만들어주었다.

<UserInfo />

<Skeleton /> 역시 이와 비슷한 형태의 모습으로 만들어준다.(만약 다른 형태의 모습으로 만든다면 사용자는 스켈레톤UI와 다른 독립적인 형태의 UI컴포넌트라고 느낄 수 있기 때문에 이를 꼭 지켜야한다.)

<Skeleton />

(+) 추가로 원한다면 여기에다가 빛나는 애니메이션 효과를 주어 좀 더 이용자의 관심을 끌 수 있다.

참고로 나는 https://betterprogramming.pub/build-a-skeleton-component-in-react-for-better-ux-b1dca9d783e6 를 통해 스켈레톤 UI 실습했다. (+) 애니메이션 부분도 있음. 꼭 참고해보자!!

profile
의미없는 삽질은 없다1

0개의 댓글

관련 채용 정보