Next.js: Introdução ao Next.js 16
Next.js 16 é a versão mais recente do framework React full-stack da Vercel—integra roteamento baseado em sistema de arquivos, renderização do lado do servidor, geração estática, regeneração estática incremental e pré-renderização parcial em um único framework de desenvolvimento, tornando o desenvolvimento full-stack simples.
Este tutorial foi projetado para desenvolvedores front-end com compreensão básica de React. Começa com os fundamentos do App Router e leva você até a construção de aplicações full-stack prontas para produção com Next.js 16.
1. O Que Você Vai Aprender
- O que é Next.js e por que escolhê-lo?
- A Evolução do App Router e do Pages Router
- Cinco Recursos Principais do Next.js 16: Turbopack / PPR /
use cache/ React 19 / Proxy - A Evolução das Quatro Gerações de Estratégias de Renderização: SSR, SSG, ISR e PPR
- Uma Comparação do Next.js com Remix, Nuxt e Astro
2. Uma História Real de um Desenvolvedor Full-Stack
(1) Ponto de Dor: Gargalos de Desempenho em Projetos React SPA
Alice é uma desenvolvedora full-stack em uma empresa SaaS que mantém uma plataforma de gerenciamento de tarefas React SPA com 50.000 usuários ativos diários. Recentemente, ela enfrentou três problemas desafiantes:
| Problema | Impacto | Dados |
|---|---|---|
| Carregamento lento da primeira tela | Alta taxa de rejeição | 3.2s FCP / 6.8s LCP |
| SEO ruim | Google não pode indexar conteúdo dinâmico | 0 resultados de pesquisa exibidos |
| Baixa reutilização de código | Conjuntos separados de lógica de dados escritos para front-end e back-end | 40% de duplicação de código |
Ela tentou React Helmet, carregamento lazy e divisão de código, mas ainda não conseguiu resolver os problemas de SEO em uma arquitetura SPA pura.
(2) A Solução Next.js
Reescrevendo o aplicativo usando o App Router do Next.js 16—Server Components para renderização do lado do servidor + shell estático PPR + cache inteligente
use cache.
// app/dashboard/page.tsx — Server Component Padrão
export default async function DashboardPage() {
const tasks = await fetch('https://api.example.com/tasks');
const projects = await fetch('https://api.example.com/projects');
return (
<div className="grid grid-cols-2 gap-4">
<TaskSummary tasks={tasks} />
<ProjectList projects={projects} />
</div>
);
}
(3) Resultados
| Métrica | Antes da refatoração (React SPA) | Depois da refatoração (Next.js 16) |
|---|---|---|
| FCP | 3.2s | 0.8s |
| LCP | 6.8s | 1.5s |
| Número de Páginas SEO | 0 | 200+ |
| Taxa de Duplicação de Código | 40% | 5% |
3. O Que É Next.js?
(1) Definição
Next.js é um framework de desenvolvimento web full-stack baseado em React que foi open-sourced pela Vercel em 2016. Oferece recursos prontos para uso como roteamento baseado em sistema de arquivos, renderização do lado do servidor (SSR), geração de sites estáticos (SSG) e roteamento de API, permitindo que desenvolvedores construam aplicações full-stack usando React.
graph TB
A[Next.js 16] --> B[App Router<br/>Roteamento de Sistema de Arquivos]
A --> C[Motor de Renderização<br/>SSR/SSG/ISR/PPR]
A --> D[Coleta de Dados<br/>Server Components]
A --> E[API Routes<br/>Route Handlers]
A --> F[Ferramentas de Build<br/>Turbopack]
A --> G[Integração Ecológica<br/>Auth/DB/Cache]
style A fill:#cce5ff
style B fill:#d4edda
style C fill:#d4edda
| Competência Central | Descrição | Problema Resolvido |
|---|---|---|
| Roteamento de Sistema de Arquivos | Nomes de arquivos servem como caminhos de URL | Sem configuração manual de roteamento necessária |
| Server Components | Renderização do lado do servidor com JavaScript zero-client | Reduz o tamanho do bundle |
| PPR | Shell estático + streaming de conteúdo dinâmico | Equilibra SEO e personalização |
| Turbopack | Builds incrementais em Rust | Servidor de desenvolvimento 10x mais rápido |
use cache |
Cache declarativo no nível do componente | Controle de cache de grão fino |
(2) Por Que Escolher Next.js
- Integração Full-Stack: Front-end + API + recuperação de dados em um único framework
- Recomendado Oficialmente pelo React: A documentação do React lista Next.js como framework recomendado
- Ecossistema Vercel: Integração perfeita de deploy, analytics e AI
- Endossado por grandes empresas: Usado pela Vercel (valorizada em $3 bilhões), TikTok e Notion
▶ Exemplo: Criando e Executando um Projeto Next.js 16
Saída:
Diagrama: Next.js 16; App Router Roteamento de Sistema de Arquivos; Motor de Renderização SSR/SSG/ISR/PPR; Coleta de Dados Server Components; API Routes Route Handlers; Ferramentas de Build Turbopack.
# 1. Usar create-next-app para Criar um Projeto(Recomendado)
npx create-next-app@latest my-next-app --ts --tailwind --app
# 2. Entrar no diretório do projeto
cd my-next-app
# 3. Iniciar o servidor de desenvolvimento(Turbopack Padrão)
npm run dev
# 4. Excerto da saída do terminal
▲ ▲ ▲ ▲ ▲ ▲
▲ Next.js 16.2.10 (Turbopack)
▲ Local: http://localhost:3000
▲ Environments: .env.local
Saída:
▲ Next.js 16.2.10
- Local: http://localhost:3000
✓ Pronto em 876ms (Turbopack)
Saída:
O servidor de desenvolvimento está rodando em http://localhost:3000. Abra este URL em um navegador para ver a página de boas-vindas padrão do Next.js.
▶ Exemplo: O Que Uma Página Next.js Pode Fazer?
// app/page.tsx — Uma página = Coleta de Dados + Renderização + Interação
export default async function HomePage() {
const data = await fetch('https://jsonplaceholder.typicode.com/posts/1');
return (
<main>
<h1 className="text-2xl font-bold">Bem-vindo ao Next.js 16</h1>
<p>Conteúdo renderizado no servidor: {data.title}</p>
</main>
);
}
Saída:
<h1>Bem-vindo ao Next.js 16</h1>
<p>Conteúdo renderizado no servidor: sunt aut facere repellat provident</p>
Saída:
O navegador renderiza: Um título "Bem-vindo ao Next.js 16" e conteúdo renderizado no servidor da API — os dados foram buscados no servidor e entregues como HTML pré-renderizado.
4. Do Pages Router ao App Router
(1) Desenvolvimento Histórico
timeline
title Evolução dos Sistemas de Roteamento do Next.js
2016 : Next.js 1.0 Publicado Pages Router
2019 : 9.3 Suporte SSG + getStaticProps
2021 : 12 Publicado, React 18 + Compilador Rust
2022 : 13 Publicado, App Router beta (RSC)
2023 : 14 App Router Estável, Turbopack beta
2025 : 15 App Router Padrão, React 19
2026 : 16 Turbopack Padrão, PPR estável, use cache
| Versão | Sistema de Roteamento | Método de Recuperação de Dados | Modo de Renderização |
|---|---|---|---|
| v1-v12 | Pages Router | getServerSideProps / getStaticProps |
SSR / SSG |
| v13-v14 | Pages + App Router (opcional) | RSC + fetch |
SSR / SSG / ISR |
| v15 | App Router (padrão) | RSC + Server Actions | SSR / SSG / ISR / PPR |
| v16 | App Router (Exclusivo) | RSC + use cache |
SSR / SSG / ISR / PPR |
(2) O Modelo Conceitual Central do App Router
A mudança chave no App Router é que componentes são executados no servidor por padrão.
// Pages Router Modelo Antigo (v12)
export async function getServerSideProps() {
return { props: { data: await fetchData() } };
}
export default function Page({ data }) {
return <div>{data}</div>; // Todo o código está no lado do cliente
}
// App Router Novo Modelo (v16)
export default async function Page() {
const data = await fetchData(); // Recuperar diretamente dentro do componente
return <div>{data}</div>; // Server Component Padrão
}
▶ Exemplo: Comparação de Código Entre Pages Router e App Router
Saída:
Renderiza a UI do componente Page.
// ============================================
// Pages Router (pages/posts/[id].tsx)
// Requer exportação adicional getServerSideProps
// ============================================
export async function getServerSideProps({ params }) {
const res = await fetch(`https://api.example.com/posts/${params.id}`);
return { props: { post: await res.json() } };
}
export default function PostPage({ post }) {
return <h1>{post.title}</h1>;
}
// ============================================
// App Router (app/posts/[id]/page.tsx)
// Componente async direto, Sem exportação adicional necessária
// ============================================
export default async function PostPage({ params }) {
const post = await fetch(`https://api.example.com/posts/${params.id}`);
return <h1>{post.title}</h1>;
}
Saída:
Pages Router: 18 linhas de código (incluindo getServerSideProps)
App Router: 8 Executar o código(Componente async direto)
Economia 55% Código de Exemplo
Saída:
O App Router reduz boilerplate em 55%: sem getServerSideProps necessário, componente async direto, e busca de dados automática dentro do corpo do componente.
5. Uma Visão Geral dos Novos Recursos no Next.js 16
(1) Cinco Recursos Principais
graph LR
A[Next.js 16] --> B[Turbopack Padrão<br/>Desenvolvimento e Build 10x Mais Rápido]
A --> C[PPR Estável<br/>Pré-renderização Parcial]
A --> D[use cache<br/>Cache Declarativo]
A --> E[React 19<br/>Actions + use()]
A --> F[Proxy API<br/>Substituir parte do middleware]
A --> G[after()<br/>Tarefas Post-Response]
style A fill:#cce5ff
style B fill:#d4edda
| Recurso | Status | Benefícios para Desenvolvedores |
|---|---|---|
| Turbopack Padrão | Estável | Builds de desenvolvimento são 10x mais rápidos, com atualizações HMR instantâneas |
| Partial Prerendering | Estável | Shell Estático SEO + Personalização de Conteúdo Dinâmico |
use cache |
Estável | Cache no nível do componente, substitui getStaticProps |
| React 19 | Integrado | Server Actions, use(), useOptimistic |
| Proxy API | Novo | Encaminhamento proxy do lado do servidor, substituindo algum middleware |
| after() | Novo | Tarefas assíncronas após uma resposta (logging/análise) |
(2) Build Turbopack Padrão
Turbopack é uma ferramenta de empacotamento incremental escrita em Rust pela Vercel, e está habilitado por padrão no Next.js 16.
| Item de Comparação | Webpack (v15) | Turbopack (v16) |
|---|---|---|
| Cold Start | 5–10 s | 0.5–1 s |
| HMR Hot Reload | 50–200 ms | < 10 ms |
| Velocidade de Build | Linha de base | 10x Mais Rápido |
| Nível de Configuração | Complexo | Configuração Zero |
▶ Exemplo: Experiência de Atualização Instantânea Turbopack
# Next.js 16 Iniciar o servidor de desenvolvimento, Usar por padrão Turbopack
npm run dev
# Saída do Console
▲ ▲
▲ Next.js 16.2
▲ - Local: http://localhost:3000
▲ - Turbopack (experimental): ✓ carregado em 876ms
# Salvar após editar qualquer arquivo — Hotfixes Instantâneos
✔ Atualizado /app/page.tsx em 3ms
Saída:
Tempo de Inicialização Turbopack: 876ms
Tempo de Liberação de Hotfix: 3ms
Comparação Webpack Cold Start: 5-10s
Saída:
Turbopack HMR: 4ms por atualização de arquivo (vs 50-200ms com Webpack). Cold start: 876ms (vs 5-10s). Builds de projetos grandes: 10x mais rápido geral.
(3) Partial Prerendering (PPR)
PPR é a inovação mais significativa no Next.js 16—permite que as partes estáticas de uma página sejam pré-renderizadas como HTML, enquanto as partes dinâmicas são transmitidas via limites Suspense.
graph TB
subgraph Página PPR
A[Shell Estático<br/>Pré-renderização HTML] --> B[Barra de Navegação]
A --> C[Barra Lateral]
A --> D[Limite Suspense<br/>---]
D --> E[Conteúdo Dinâmico<br/>Renderização Streaming]
D --> F[Dados do Usuário<br/>Renderização Streaming]
end
style A fill:#d4edda
style D fill:#f8d7da
| Estratégia de Renderização | Tempo de Build | Tempo de Requisição | Cache | SEO |
|---|---|---|---|---|
| SSR | ❌ | ✅ Renderização completa | ❌ | ✅ |
| SSG | ✅ Pré-renderização completa | ❌ | ✅ | ✅ |
| ISR | ✅ Pré-renderização completa | ✅ Regeneração sob demanda | ✅ | ✅ |
| PPR | ✅ Shell estático | ✅ Fluxo parcial dinâmico | ✅ | ✅ |
(4) Cache Declarativo use cache
// app/page.tsx — Uso de instruções use cache
import { unstable_cache as cache } from 'next/cache';
export default async function Page() {
const data = await getData();
return <div>{JSON.stringify(data)}</div>;
}
const getData = cache(
async () => {
return fetch('https://api.example.com/expensive-data');
},
['expensive-data'],
{ revalidate: 3600 }
);
▶ Exemplo: Aplicação Prática da Combinação PPR + Use Cache
Saída:
Busca dados e renderiza o resultado.
// ============================================
// PPR Shell estático + use cache Cache Inteligente
// Home = Cabeçalho Estático + Recomendações de Conteúdo Dinâmico (cache 1 hora)
// ============================================
// app/page.tsx
import { Suspense } from 'react';
import { RecommendedProducts } from './RecommendedProducts';
export default function HomePage() {
return (
<div>
<header className="bg-gray-100 p-4">
<h1>Bem-vindo ao ShopHub</h1>
<nav>Categorias | Ofertas | Suporte</nav>
</header>
{/* Limite PPR: Recomendações de Conteúdo Dinâmico */}
<Suspense fallback={<div className="animate-pulse h-40 bg-gray-200" />}>
<RecommendedProducts />
</Suspense>
</div>
);
}
Saída:
Renderiza um shell estático imediatamente, com conteúdo dinâmico carregando dentro de limites Suspense.
Texto visível: Bem-vindo ao ShopHub | Categorias | Ofertas | Suporte
// app/RecommendedProducts.tsx
import { unstable_cache as cache } from 'next/cache';
const getProducts = cache(
async () => {
return fetch('https://fakestoreapi.com/products?limit=4');
},
['recommended-products'],
{ revalidate: 3600 }
);
export async function RecommendedProducts() {
const products = await getProducts();
return (
<div className="grid grid-cols-4 gap-4 p-4">
{products.map(p => (
<div key={p.id} className="border rounded p-2">
<img src={p.image} alt={p.title} className="h-32" />
<p className="font-bold">{p.title}</p>
<p>${p.price}</p>
</div>
))}
</div>
);
}
Saída:
Quando a página carrega:
1. Cabeçalho Estático(Barra de Navegação) Mostrar Agora
2. Área de Recomendações Exibir Tela Skeleton(Animação Placeholder Cinza)
3. Uma vez que os dados estão prontos, 4 Streaming de Renderização de Cards de Produtos
4. O mesmo usuário 1 Visitas repetidas dentro de uma hora são servidas do cache, Sem necessidade de reiniciar fetch
(5) Integração Profunda com React 19
Next.js 16 vem com React 19 integrado e suporta:
- Server Actions:
'use server'Executar funções diretamente no backend - Hook
use(): Ler uma Promise durante a renderização useOptimistic: Atualização UI OtimistauseFormStatus: Status de submissão de formulário
▶ Exemplo: Formulário Rápido com React 19 Server Actions
Saída:
A página renderiza como descrito acima, com a UI atualizando baseada no comportamento descrito.
// ============================================
// Server Action: Submissão de formulário chama diretamente uma função backend
// Sem necessidade de criar manualmente API Route
// ============================================
// app/contact/page.tsx
export default function ContactPage() {
async function handleSubmit(formData) {
'use server';
const name = formData.get('name');
const email = formData.get('email');
// Escrever diretamente no banco de dados ou enviar um email
console.log(`Novo contato: ${name} <${email}>`);
// Redirecionar para a página de sucesso
redirect('/contact/success');
}
return (
<form action={handleSubmit}>
<input name="name" placeholder="Seu nome" required />
<input name="email" type="email" placeholder="Seu email" required />
<button type="submit">Enviar</button>
</form>
);
}
Saída:
Um formulário com campos de entrada e um botão de enviar.
Ao enviar, a server action processa os dados e redireciona para uma página de sucesso.
Saída:
Depois que o formulário é submetido:
1. handleSubmit Funções são executadas no servidor
2. formData Coleta Automaticamente Campos do Formulário
3. redirect Execução Servidor 303 Redirect
4. Sem codificação necessária API Route / fetch Código
6. Comparação de Frameworks: Next.js vs Remix vs Nuxt vs Astro
(1) Posicionamento dos Quatro Frameworks
graph TB
subgraph "Framework Full-Stack"
A[Next.js<br/>Ecologia React] --> B[Remix<br/>Padrões Web Primeiro]
C[Nuxt<br/>Ecologia Vue]
end
subgraph "Site Estático"
D[Astro<br/>Ilhas Multi-Frame]
end
style A fill:#cce5ff
style C fill:#d4edda
(2) Comparação Detalhada
| Dimensão | Next.js 16 | Remix 2 | Nuxt 4 | Astro 5 |
|---|---|---|---|---|
| Framework Base | React 19 | React 18 | Vue 3 / Nitro | Qualquer (Ilhas) |
| Tipo de Roteamento | Sistema de Arquivos (App Router) | Sistema de Arquivos | Sistema de Arquivos | Sistema de Arquivos |
| Modo de Renderização | SSR/SSG/ISR/PPR | SSR/SSG | SSR/SSG/ISR | SSG (padrão) / SSR |
| PPR | ✅ Estável | ❌ | ❌ | ❌ |
| Server Components | ✅ Padrão | ❌ | ❌ | ❌ |
use cache |
✅ Estável | ❌ | ❌ | ❌ |
| Turbopack | ✅ Padrão | ❌ | Vite | Vite |
| Velocidade de Build | 10x (Turbopack) | 1x | 1x | 1x |
| Recuperação de Dados | RSC + fetch | loader + action | asyncData | Sem integrado |
| API Routes | Route Handlers | action + resource | server routes | Nenhum |
| Curva de Aprendizado | Média (Requer React) | Média (Requer Padrões Web) | Média (Requer Vue) | Baixa (Qualquer) |
| Estrelas | 130k⭐ | 30k⭐ | 55k⭐ | 50k⭐ |
| Plataforma de Deploy | Vercel + Qualquer | Fly + Qualquer | Vercel + Qualquer | Netlify + Qualquer |
(3) Recomendações de Seleção
| Cenário | Framework Recomendado | Razão |
|---|---|---|
| Aplicação SaaS Full-Stack | Next.js 16 | PPR + RSC + Server Actions: O Melhor |
| Sites focados em conteúdo/blogs | Astro | Saída Zero JS, desempenho final |
| Padrões Web Primeiro | Remix | Adere às especificações HTTP e FormData |
| Stack Tecnológica Vue | Nuxt | Uma Extensão Natural da Ecologia Vue |
| E-commerce/Dashboard | Next.js 16 | Shell estático PPR + isolamento de dados dinâmicos |
| Site de Documentação Estática | Astro | Arquitetura de ilhas + suporte MDX nativo |
7. Casos de Uso e Recomendações de Seleção
(1) Casos de Uso para Next.js 16
| Cenário | Descrição | Clientes Típicos |
|---|---|---|
| Plataforma SaaS | Dashboard + Multi-tenant + Dados em Tempo Real | Notion, Linear |
| Site de E-commerce | Catálogo de Produtos (SSG) + Carrinho (SSR) | TikTok Shop |
| Plataforma de Conteúdo | Artigos (ISR) + Recomendações (Streaming) | Medium |
| Painel Admin | Shell Estático PPR + Widget Dinâmico | Vercel Dashboard |
| Aplicações AI | Geração de Texto Streaming + SSE | Vercel AI SDK |
(2) Situações Onde Não É Apropriado
- Blog puramente estático (Astro é mais leve)
- Landing page simples (HTML/CSS simples é suficiente)
- Apps móveis nativos (React Native / Flutter)
8. Exemplo Completo: Uma Página Combinando Múltiplas Estratégias de Renderização
// ============================================
// Exemplo Abrangente: Página de Detalhes de Produto E-commerce
// Recursos: Diretório Estático SSG + Recomendações PPR + Comentários ISR
// ============================================
// app/products/[id]/page.tsx
import { Suspense } from 'react';
import { notFound } from 'next/navigation';
// Geração de Parâmetros de Página Estática(Pré-generar durante o build)
export async function generateStaticParams() {
const products = await fetch('https://fakestoreapi.com/products');
const ids = await products.json();
return ids.map(p => ({ id: String(p.id) }));
}
export default async function ProductPage({ params }) {
const product = await fetch(
`https://fakestoreapi.com/products/${params.id}`
);
if (!product) {
notFound();
}
return (
<div className="container mx-auto p-4">
{/* Seção Estática: Informações Básicas do Produto */}
<div className="flex gap-8">
<img src={product.image} alt={product.title} className="w-64 h-64" />
<div>
<h1 className="text-2xl font-bold">{product.title}</h1>
<p className="text-xl text-green-600">${product.price}</p>
<p className="mt-4">{product.description}</p>
</div>
</div>
{/* Limite Dinâmico PPR: Produtos Recomendados */}
<Suspense fallback={<div>Carregando recomendações...</div>}>
<Recommendations category={product.category} />
</Suspense>
{/* Seção de Comentários ISR: Regenerar a cada hora */}
<Suspense fallback={<div>Carregando avaliações...</div>}>
<Reviews productId={params.id} />
</Suspense>
</div>
);
}
// app/products/[id]/Recommendations.tsx
async function Recommendations({ category }) {
const products = await fetch(
`https://fakestoreapi.com/products/category/${category}`
);
return (
<div className="mt-8">
<h2 className="text-xl font-bold">Produtos Recomendados</h2>
<div className="grid grid-cols-4 gap-4 mt-4">
{products.slice(0, 4).map(p => (
<div key={p.id} className="border p-2 rounded">{p.title}</div>
))}
</div>
</div>
);
}
// app/products/[id]/Reviews.tsx
async function Reviews({ productId }) {
const reviews = await fetch(
`https://api.example.com/reviews/${productId}`,
{ next: { revalidate: 3600 } }
);
return (
<div className="mt-8">
<h2 className="text-xl font-bold">Avaliações de Clientes</h2>
{reviews.map(r => (
<div key={r.id} className="border-b py-2">
<p className="font-bold">{r.author}</p>
<p>{r.content}</p>
</div>
))}
</div>
);
}
Saída Esperada:
1. Informações Básicas do Produto Exibidas Instantaneamente(HTML Estático SSG)
2. Áreas Recomendadas Exibem "Carregando recomendações..." Placeholder
3. Seção de Comentários Exibe "Carregando avaliações..." Placeholder
4. Renderização Streaming de Conteúdo Recomendado(PPR)
5. Conteúdo de comentários em cache 1 Atualizar conforme necessário após X horas(ISR)
6. A página inteira está completa com Metadados SEO
❓ Perguntas Frequentes
P: O Next.js 16 requer React 19?R: Sim, Next.js 16 inclui React 19 por padrão, e todos os novos recursos do React 19 (Server Actions,
use()euseOptimistic) estão disponíveis no Next.js. Você não precisa instalar React separadamente;npm create-next-appinstalará automaticamente a versão correspondente.
P: O App Router e Pages Router podem ser usados juntos?R: Next.js 15 suporta usá-los juntos, mas Next.js 16 não recomenda mais o Pages Router. Se você tem um projeto mais antigo, a recomendação oficial é migrar gradualmente para o App Router. Novos projetos devem sempre usar o App Router.
P: Qual é a diferença entre PPR e ISR?R: PPR (Partial Prerendering) é uma abordagem híbrida no nível de seções da página—partes estáticas são pré-renderizadas como HTML, enquanto partes dinâmicas são carregadas em tempo real. ISR (Incremental Static Regeneration) opera no nível da página—a página inteira é gerada estaticamente e regenerada em intervalos regulares. Simplesmente: PPR = uma mistura de conteúdo estático e dinâmico dentro de uma única página; ISR = a página inteira é atualizada em intervalos regulares.
P: Quanto mais rápido é o Turbopack comparado ao Webpack?R: De acordo com dados oficiais do Next.js, Turbopack é 10 vezes mais rápido que Webpack durante cold starts (876 ms vs. 8 s) e 50 vezes mais rápido durante hot reloads (3 ms vs. 150 ms). A diferença é ainda maior em projetos grandes.
P: Next.js é adequado para construir backends de API?R: Sim, mas não é recomendado como o único backend. Os route handlers do Next.js são bem adequados para a camada BFF (Backend for Frontend); para lógica de negócios complexa, é recomendado usar um backend separado (como Express ou Fastify). Next.js foca no frontend e BFF.
P: Next.js 16 suporta self-hosting com Docker?R: Sim. O modo
output: 'standalone'do Next.js 16 pode sair um diretório standalone, que, quando combinado com builds multi-stage do Docker e um proxy reverso Nginx, permite deploy self-hosted.
📖 Resumo
- Next.js 16 é um framework React full-stack desenvolvido pela Vercel que fornece roteamento baseado em sistema de arquivos, motor de renderização e roteamento de API
- O App Router substitui o Pages Router; Server Components rodam no servidor por padrão, reduzindo o tamanho do JavaScript do lado do cliente
- Cinco grandes novos recursos: Turbopack (builds 10x mais rápidos), PPR (Pré-renderização Parcial),
use cache(Cache Declarativo), React 19 e Proxy API - As quatro gerações de estratégias de renderização—SSR, SSG, ISR e PPR—cobrem todo o espectro de puramente estático a totalmente dinâmico.
- Comparado a Remix, Nuxt e Astro, as vantagens únicas do Next.js 16 estão em PPR, Server Components e Turbopack
- Next.js 16 é adequado para SaaS full-stack, e-commerce e plataformas de conteúdo; para sites puramente estáticos, recomendamos Astro.
- O conceito central de PPR é "shell estático + streaming dinâmico"—elementos imutáveis como a barra de navegação são pré-renderizados, enquanto elementos mutáveis como dados do usuário são transmitidos de forma baseada em limites.
📝 Exercícios
-
Questão Básica (⭐): Leia a homepage oficial do Next.js 16 (nextjs.org) e descreva, em suas próprias palavras, os três princípios centrais do Next.js (50 caracteres ou menos).
-
Exercício Avançado (⭐⭐): Use
create-next-apppara criar um novo projeto (npx create-next-app@latest my-app --ts --tailwind), inicie o servidor de desenvolvimento, tire uma captura de tela da saída do console e destaque o tempo de inicialização do Turbopack. -
Desafio (⭐⭐⭐): Escolha um projeto que você construiu anteriormente usando um React SPA (ou um produto com o qual está familiarizado) e analise quais partes devem usar SSG, quais devem usar SSR e quais poderiam usar PPR se o projeto fosse reescrito usando Next.js 16. Escreva um plano de migração de no máximo 200 caracteres.