일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- SSR
- 리액트
- RECOIL
- @tailwind utility
- 프로그래머스
- dynamic pages
- revalidatepath
- image component
- createbrowserrouter
- sever action
- server components
- render phase
- sever components
- commit phase
- @tailwind
- js
- interceptor routes
- 3진법 뒤집기
- client components
- supabase realtime
- iron-session
- @tailwind components
- revalidatetag
- static pages
- unstable_nostore
- 클로저
- 자바스크립트
- 타입스크립트
- CSS
- @tailwind base
- Today
- Total
개발하는 너구리
Suspense components 본문
Next.js에서 Suspense는 React의 Suspense 컴포넌트를 사용하여 비동기 작업(주로 데이터 가져오기)을 처리할 때 UI를 더 잘 관리할 수 있도록 도와줍니다. Suspense는 데이터가 로드되기 전까지 로딩 상태를 표시하고, 데이터가 준비되면 실제 UI를 렌더링합니다.
React의 Suspense는 서버 측에서 데이터를 미리 가져와서 페이지를 렌더링할 때 사용할 수 있으며, 이는 사용자 경험을 향상시키는 데 매우 유용합니다. Next.js는 이러한 기능을 지원하여 서버 측에서 데이터를 가져와 렌더링하는 것을 더욱 쉽게 만들어 줍니다.
기본 개념
Suspense는 컴포넌트가 렌더링하기 전에 데이터가 준비될 때까지 기다릴 수 있게 해줍니다. 로딩 상태를 표시할 때 fallback 속성을 사용합니다.
사용 예제
다음은 Suspense를 사용하는 기본적인 예제입니다.
import React, { Suspense } from 'react';
const SomeComponent = React.lazy(() => import('./SomeComponent'));
function MyComponent() {
return (
<div>
<Suspense fallback={<div>Loading...</div>}>
<SomeComponent />
</Suspense>
</div>
);
}
export default MyComponent;
Next.js에서 Suspense 사용하기
Next.js는 Suspense를 서버 측 데이터 가져오기와 함께 사용할 수 있는 기능을 제공합니다. 이는 React 18의 서버 컴포넌트 기능과 결합하여 더 나은 서버 렌더링을 지원합니다.
import { Suspense } from 'react';
async function fetchData() {
const res = await fetch('https://jsonplaceholder.typicode.com/posts');
const data = await res.json();
return data;
}
function Posts() {
const data = fetchData();
return (
<div>
{data.map(post => (
<div key={post.id}>{post.title}</div>
))}
</div>
);
}
export default function Page() {
return (
<div>
<Suspense fallback={<div>Loading posts...</div>}>
<Posts />
</Suspense>
</div>
);
}
이 예제에서는 Posts 컴포넌트가 비동기 함수 fetchData를 사용하여 데이터를 가져오며, Suspense는 데이터가 로드되는 동안 "Loading posts..."를 표시합니다.
주의사항
- 서버 컴포넌트와 클라이언트 컴포넌트 분리: Next.js에서는 서버에서만 실행되는 컴포넌트와 클라이언트에서만 실행되는 컴포넌트를 구분해야 합니다. Suspense를 사용할 때 이 점을 고려해야 합니다.
- Suspense와 ErrorBoundary: 데이터 가져오기에 실패했을 때를 대비하여 ErrorBoundary를 함께 사용하는 것이 좋습니다. 이를 통해 더 나은 사용자 경험을 제공할 수 있습니다.
결론
Next.js에서 Suspense를 사용하면 데이터가 준비될 때까지 UI를 관리하는 데 매우 유용합니다. 이는 비동기 작업을 처리할 때 더 나은 사용자 경험을 제공하며, 서버 렌더링과 결합하여 성능을 최적화할 수 있습니다. Next.js 13 이상에서는 서버 컴포넌트와 함께 사용할 수 있어 더욱 강력한 기능을 제공합니다.
'TIL' 카테고리의 다른 글
caching (0) | 2024.06.19 |
---|---|
useFormState, useFormStatus (0) | 2024.06.18 |
SSR, React Server Components(RSC), Client Components (0) | 2024.06.12 |
createBrowserRouter, loader, action (0) | 2024.06.11 |
Render Phase, Commit Phase (0) | 2024.06.06 |