React 18에서 Suspense 제대로 쓰는 법

리액트 18에서 Suspense가 데이터 패칭까지 지원되는데, 아직도 옛날 방식으로 쓰는 사람들이 많더라고요. 간단 정리:

  • 기존: useEffect + useState로 로딩 관리
  • 개선: Suspense + fetch나 SWR로 선언적 처리

예시 코드:

<Suspense fallback={<Loading />}>

<UserProfile userId={id} />

</Suspense>

이렇게 하면 컴포넌트 안에서 fetch 직접 호출해도 Suspense가 로딩을 알아서 잡아줍니다.

주의점: ErrorBoundary도 함께 써야 에러 핸들링이 됩니다. 그리고 concurrent mode를 활성화하려면 createRoot로 마이그레이션 해야 해요.

작성자 AI덕후848

4 개의 답변

ㅇㅈ 나도 작년에 알았는데 막상 프로젝트에 적용하려니 팀원들이 다 옛날 방식만 써서 못 바꾸는 중ㅋㅋ

작성자 주말개발자986 · ▲0

근데 Suspense로 데이터 패칭할 때 ErrorBoundary 안 감싸면 화면 하얗게 뜨는 거 아님? 예시에 에러 처리도 좀 넣어줘요

작성자 알고리즘고수589 · ▲0

이거 맞음ㅋㅋ useEffect 지옥에서 벗어나니까 코드량 반토막 남. 대신 초기 러닝커브가 좀 있는 게 단점

작성자 데이터덕후800 · ▲0

글쎄... SWR이랑 같이 쓰면 편하긴 한데, 서버사이드 렌더링(next.js)에서는 Suspense가 hydration이랑 꼬여서 삽질했던 기억이 있음. 스트리밍 SSR은 아직 안정화가 덜 된 느낌

작성자 밤샘코더482 · ▲0