Capítulo 31 de 456
Decida entre use() com uma Promise única (sem revalidação client-side), ou uma lib de cache client (SWR/TanStack Query/Apollo) quando Client Components precisam de cache compartilhado no browser com revalidação por foco, polling, dedupe ou updates otimistas.
use() + Promise: para dado lido uma vez, sem necessidade de revalidação no client; evita adicionar lib.useSWR/useQuery, cada componente renderiza seu próprio loading/error.useSWR({suspense:true})/useSuspenseQuery, loading definido num boundary compartilhado.<SWRConfig fallback>/<HydrationBoundary>, dado disponível no render inicial ou via streaming.cacheLife (revalidate, expire).cacheLife stale.updateTag(tag): invalida e força o próximo read a esperar dado fresco, use quando Server Action precisa refletir a mudança imediatamente.revalidateTag(tag, 'max'): serve stale enquanto revalida em background, para updates passivos.revalidateTag(tag, {expire:0}): expira imediatamente, para webhook/sistema externo.| Pattern | SWR | TanStack Query | Quando o dado fica disponível |
|---|---|---|---|
| Inline loading | useSWR | useQuery | Requisição no browser após hidratação |
| Suspense loading | useSWR({suspense:true}) | useSuspenseQuery | Requisição no browser após hidratação |
| Fornecido pelo servidor | <SWRConfig fallback> | <HydrationBoundary> | Render inicial ou streamed do servidor |
| Layer | O que guarda | Controle de freshness |
|---|---|---|
| Next.js server cache | Dados cacheados e output de Server Component | cacheLife revalidate/expire |
| Next.js client cache | Payloads RSC de rotas visitadas/prefetched | cacheLife stale |
| Lib client de fetch | Dado do browser sob key SWR/TanStack | Opções de revalidação/mutation da própria lib |
use() a adicionar uma lib.