Suspense가 무엇인고...?
Suspense란?
Suspense는 React 컴포넌트를 잠시멈추고 기다릴 수 있도록하는 기능이다.
로딩 중인 컴포넌트 대신 사용자에게 일시적인 UI(fallback)을 보여주고 준비가 되었을 때 실제 컴포넌트를 보여준다.
Suspense 기본 문법
import { Suspense } from 'react';
<Suspense fallback={<p>로딩 중...</p>}>
<MyComponent />
</Suspense>
MyComponent 가 로드 중일 경우 대신 fallback{<p>로딩 중...</p>}을 대신 보여주고 로드가 완료되면 <MyComponent /> 로 대체된다.
Suspense가 사용되는 경우
1️⃣ React.lazy()로 지연 로딩을 하는 경우
import { Suspense, lazy } from 'react'
const LazyComponent = lazy(() => import('./HeavyComponent'))
function App() {
return (
<Suspense fallback={<p>Loading...</p>}>
<LazyComponent />
</Suspense>
)
}
2️⃣ Next.js 의 use() 사용 시 (비동기)
Suspense를 명시하지 않고도 자동으로 사용할 수 있는 방법이 있다.
loading.tsx를 만들어 해당 loading을 사용할 page.tsx 와 같은 파일경로 내에 위치시키면 use()호출이 Promise Pending 상태일 때 loading.tsx를 자동으로 fallback으로 사용한다. => Suspense를 내부적으로 자동 사용한다.
app/
├─ dashboard/
│ ├─ page.tsx
│ ├─ loading.tsx
// page.tsx
export default function DashboardPage() {
const data = use(fetchData()) // 서버에서 데이터 fetch
return <div>{data.title}</div>
}
//loading.tsx
export default function Loading() {
return <p>로딩 중입니다...</p>
}
3️⃣ RCC와 함께 쓰일 경우
React Client Component는 서버에서 렌더링 되지 않기 때문에 서버 컴포넌트가 Suspense로 감싸야한다.
Suspense로 감싸면 Client Component가 JS로 로딩될 때까지 fallback UI가 먼저 보여진다.
// layout.tsx
<Suspense fallback={<h1>로딩 중...</h1>}>
<ReactClientComponent />
</Suspense>
'Dev > Next.js' 카테고리의 다른 글
| [Next.js] Next.js 는 뭘까..? (0) | 2025.05.26 |
|---|---|
| [Next.js] PreRendering 과 Hydration (0) | 2025.05.22 |
