R
Interview Deckreact · next.js · senior/staff
0·0·122
Padrão

Suspense Boundaries

Múltiplos Suspense próximos dos dados = loading independente por área, sem bloquear a página.

Suspense é um componente que captura promises que ainda não resolveram, mostrando um fallback (skeleton, spinner) até que resolvam. Funciona com lazy loading, RSC streaming e libs como React Query (com suspense:true).

Problema
Um único Suspense no topo bloqueia a página inteira enquanto qualquer componente carrega.
Solução
Colocar Suspense ao redor de cada área que carrega dados — granularidade máxima.
Tip
Cada Suspense boundary = área independente. Mais granular = melhor UX. Nunca um só no topo.
<Layout>
  <Suspense fallback={<HeaderSkeleton />}>
    <Header />
  </Suspense>

  <Suspense fallback={<FeedSkeleton />}>
    <Feed />
  </Suspense>

  <Suspense fallback={<SidebarSkeleton />}>
    <Sidebar />
  </Suspense>
</Layout>
Q.Como Suspense detecta que está esperando?
A.Componentes filhos 'lançam' uma Promise (throw promise). Suspense captura via try/catch interno do React e renderiza o fallback até a Promise resolver. Libs como React Query e RSC fazem isso por baixo dos panos.
Q.Suspense funciona com fetch tradicional em useEffect?
A.Não diretamente. Suspense precisa de uma fonte que 'suspenda' (lance Promise). Para useEffect tradicional, você implementa loading manual. Para Suspense, use libs (React Query, SWR, Relay) ou RSC.
Q.O que acontece se um Suspense falha?
A.Suspense só lida com loading. Pra erros, combine com ErrorBoundary. O padrão é: <ErrorBoundary><Suspense fallback={...}>...</Suspense></ErrorBoundary>
5/122← →