React의 Suspense
는 데이터 불러오기, 코드 스플리팅, 이미지 로딩 등 비동기적인 작업을 처리할 때 사용됩니다. 이를 활용하여 이미지 갤러리의 썸네일 로딩 상태를 관리할 수 있습니다.
1. 이미지 로딩 상태 관리 컴포넌트 생성
이미지 갤러리에서 썸네일 로딩 상태를 관리하기 위해, Suspense
를 사용하여 해당 상태를 컨트롤하는 컴포넌트를 생성합니다.
import React, { Suspense, useState } from 'react';
const ThumbnailGallery = () => {
const [loading, setLoading] = useState(true);
// 썸네일 로딩이 완료되면 상태를 업데이트하는 콜백 함수
const handleThumbnailLoad = () => {
setLoading(false);
};
return (
<Suspense fallback={<Spinner />}>
{loading && <ThumbnailLoader onLoad={handleThumbnailLoad} />}
// 썸네일 컴포넌트들
</Suspense>
);
};
위 예제에서 ThumbnailGallery
는 이미지 갤러리를 렌더링하는 컴포넌트입니다. loading
이 true
일 때는 로딩 스피너를, false
일 때는 썸네일 컴포넌트들을 보여줍니다.
2. 썸네일 로딩 컴포넌트 생성
이미지 갤러리의 각 썸네일 로딩 상태를 관리하기 위해, ThumbnailLoader
컴포넌트를 생성합니다.
import React, { useEffect } from 'react';
const ThumbnailLoader = ({ onLoad }) => {
useEffect(() => {
// 썸네일 로딩 로직
// ...
// 로딩이 완료되면 onLoad 콜백 호출
onLoad();
}, [onLoad]);
return <div>썸네일 로딩 중...</div>;
};
위 예제에서 ThumbnailLoader
는 썸네일 로딩을 처리하는 컴포넌트입니다. useEffect
훅을 사용하여 비동기적인 작업을 수행하고, 로딩이 완료되면 onLoad
콜백을 호출하여 loading
상태를 업데이트합니다.
3. 스피너 컴포넌트 생성
로딩 중에 보여줄 스피너 컴포넌트를 생성합니다.
const Spinner = () => {
return <div>로딩 중...</div>;
};
위 예제에서 Spinner
는 로딩 중에 표시될 스피너 컴포넌트입니다.
요약
위와 같이 Suspense
를 사용하여 이미지 갤러리의 썸네일 로딩 상태를 관리할 수 있습니다. ThumbnailGallery
컴포넌트에서 loading
상태를 관리하고, ThumbnailLoader
컴포넌트에서 로딩 작업을 처리하며, Spinner
컴포넌트에서 로딩 중에 표시될 UI를 구현합니다.
이를 통해 사용자에게 로딩 상태를 시각적으로 보여주고, 모든 썸네일이 로딩 완료될 때까지 기다리는 효과적인 이미지 갤러리를 구현할 수 있습니다.