Suspense

Suspense는 React 컴포넌트가 비동기 작업을 수행하는 동안 로딩 상태를 처리하는 데 사용된다. 컴포넌트가 비동기 작업을 완료할 때까지 대체 UI(fallback)을 보여준다.

  • children : Suspense 컴포넌트의 자식으로 렌더링하려는 실제 UI이다.

  • fallback : 로딩이 완료되지 않았을 때 보여줄 대체 UI (로딩 스피너, 스켈레톤)

주의사항

State 보존 :

React는 처음 마운트되기 전에 일시 중단된 렌더링의 state를 보존하지 않는다. 컴포넌트가 로드되면 React는 일시 중단된 트리를 처음부터 다시 렌더링한다.

<Suspense fallback={<LoadingSpinner />}>
  <ComponentThatSuspends />
</Suspense>

Suspense와 상태관리

Suspense가 트리의 콘텐츠를 표시하다가 다시 일시 중단되면, 그 원인이 startTransition이나 useDeferredValue로 인한 것이 아니라면 fallback이 다시 표시된다.

import { useDeferredValue } from 'react';

function MyComponent({ value }) {
  const deferredValue = useDeferredValue(value);
  // deferredValue 사용
}

고급 활용법

동적 코드 스플리팅

React.lazy를 사용하여 컴포넌트를 동적으로 로드하고 Suspense를 사용하여 로딩 상태를 관리한다.

const OtherComponent = React.lazy(() => import('./OtherComponent'));

function App() {
  return (
    <Suspense fallback={<div>Loading other component...</div>}>
      <OtherComponent />
    </Suspense>
  );
}

Last updated