Space
article thumbnail
반응형

[NextJS] Skeleton (스켈레톤)

영상

반응형

 

Code

로딩 시 보여주고 싶은 페이지의 자식으로 loading.tsx (jsx) 파일을 만듭니다.

loading.tsx(jsx) 파일을 만들면 Next.js가 알아서 로딩 시 동작합니다.

// app/products/[id]/loading.tsx

import { PhotoIcon } from "@heroicons/react/24/solid";

export default function Loading() {
  return (
    <div className="animate-pulse p-5 flex flex-col gap-5">
      <div className="aspect-square border-neutral-700 text-neutral-700 border-4 border-dashed rounded-md flex justify-center items-center">
        <PhotoIcon className="h-28" />
      </div>
      <div className="flex gap-2 items-center">
        <div className="size-14 rounded-full bg-neutral-700" />
        <div className="flex flex-col gap-1">
          <div className="h-5 w-40 bg-neutral-700 rounded-md" />
          <div className="h-5 w-20 bg-neutral-700 rounded-md" />
        </div>
      </div>
      <div className="h-10 w-80 bg-neutral-700 rounded-md" />
    </div>
  );
}

 

로딩 시 화면을 보기 위해 setTimeOut을 사용하였습니다.

 

아래의 코드는 처음 5초 동안은 loading.tsx 파일의 화면을 보여주며,

5초 후 가져온 데이터를 보여줍니다.

 

// app/products/[id]/page.tsx

async function getProduct() {
  await new Promise((resolve) => setTimeout(resolve, 5000));
}

export default async function ProductDetail({
  params: { id },
}: {
  params: { id: string };
}) {
  const product = await getProduct();
  return <span>Product detail of the product {id}</span>;
}

 

반응형
profile

Space

@Space_zero

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!