이미지 로딩을 지연시키기 위해 Suspense를 사용하는 방법은 다음과 같습니다:
-
우선, React 프로젝트에서 Suspense를 사용할 준비를 해야 합니다. React 버전 16.6 이상을 사용하고 있다면 이미 Suspense가 내장되어 있을 것입니다. 그렇지 않은 경우,
react
와react-dom
패키지를 최신 버전으로 업데이트해야 합니다. -
Suspense 컴포넌트를 정의하고, fallback 속성을 사용하여 로딩 중에 보여줄 UI를 지정합니다. 예를 들어, 이미지 로딩 중에는 로딩 스피너를 보여줄 수 있습니다.
import React, { Suspense } from 'react'; import LoadingSpinner from './LoadingSpinner'; function ImageWithLazyLoading() { return ( <Suspense fallback={<LoadingSpinner />}> <LazyImage /> </Suspense> ); }
위의 예시에서
LazyImage
는 실제로 이미지를 로딩하고 렌더링하는 컴포넌트입니다. -
LazyImage
컴포넌트 내부에서 이미지를 지연 로딩합니다. React.lazy 함수를 사용하여 비동기적으로 이미지 컴포넌트를 가져올 수 있습니다.import React from 'react'; const LazyImage = React.lazy(() => import('./LazyLoadedImage')); function ImageWithLazyLoading() { return ( <Suspense fallback={<LoadingSpinner />}> <LazyImage /> </Suspense> ); }
위의 예시에서
LazyLoadedImage
는 실제로 이미지를 로딩하고 렌더링하는 컴포넌트입니다. -
이미지를 로딩하는 컴포넌트(
LazyLoadedImage
)를 작성합니다. 이 컴포넌트는 비동기적으로 이미지를 가져오고, 가져온 이미지를 렌더링합니다.import React from 'react'; function LazyLoadedImage() { const [imageLoaded, setImageLoaded] = React.useState(false); React.useEffect(() => { // 이미지를 비동기적으로 가져오는 로직 작성 // 이미지 가져오기 성공 시 setImageLoaded(true); // 이미지 가져오기 실패 시 // 에러 처리 로직 작성 }, []); return imageLoaded ? <img src="path-to-image.jpg" alt="Lazy Loaded Image" /> : null; }
LazyLoadedImage
컴포넌트는 이미지를 비동기적으로 가져와서 가져온 이미지를 렌더링합니다. 이미지가 로딩되면 이미지가 표시되고, 그렇지 않으면 null이 반환됩니다.
이제 Suspense를 사용하여 이미지 로딩을 지연시킬 수 있습니다. Suspense는 로딩 중에는 fallback UI를 보여주고, 필요한 동안 비동기 작업을 처리하도록 도와줍니다.