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



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.

TSX
// 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.

100%
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

▶ Exemplo: Criando e Executando um Projeto Next.js 16

Saída:

TEXT 📖 Somente leitura
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.
BASH
# 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:

TEXT 📖 Somente leitura
▲ Next.js 16.2.10
- Local: http://localhost:3000
✓ Pronto em 876ms (Turbopack)

Saída:

TEXT 📖 Somente leitura
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?

TSX
// 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:

TEXT 📖 Somente leitura
<h1>Bem-vindo ao Next.js 16</h1>
<p>Conteúdo renderizado no servidor: sunt aut facere repellat provident</p>

Saída:

TEXT 📖 Somente leitura
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

100%
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.

TSX
// 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:

TEXT 📖 Somente leitura
Renderiza a UI do componente Page.
TSX
// ============================================
// 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:

TEXT 📖 Somente leitura
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:

TEXT 📖 Somente leitura
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

100%
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

BASH
# 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:

TEXT 📖 Somente leitura
Tempo de Inicialização Turbopack: 876ms
Tempo de Liberação de Hotfix: 3ms
Comparação Webpack Cold Start: 5-10s

Saída:

TEXT 📖 Somente leitura
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.

100%
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

TSX
// 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:

TEXT 📖 Somente leitura
Busca dados e renderiza o resultado.
TSX
// ============================================
// 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:

TEXT 📖 Somente leitura
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
TSX
// 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:

TEXT 📖 Somente leitura
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:

▶ Exemplo: Formulário Rápido com React 19 Server Actions

Saída:

TEXT 📖 Somente leitura
A página renderiza como descrito acima, com a UI atualizando baseada no comportamento descrito.
TSX
// ============================================
// 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:

TEXT 📖 Somente leitura
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:

TEXT 📖 Somente leitura
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

100%
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



8. Exemplo Completo: Uma Página Combinando Múltiplas Estratégias de Renderização

TSX
// ============================================
// 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:

TEXT 📖 Somente leitura
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() e useOptimistic) estão disponíveis no Next.js. Você não precisa instalar React separadamente; npm create-next-app instalará 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


📝 Exercícios

  1. 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).

  2. Exercício Avançado (⭐⭐): Use create-next-app para 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.

  3. 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.

Web-Tutorial.com

Equipe Técnica Web-Tutorial

Uma plataforma de tutoriais mantida por diversos desenvolvedores. Cada tutorial é escrito e revisado por profissionais da área correspondente. Trabalhamos para manter nosso conteúdo preciso e confiável — se encontrar algum problema, avise-nos.

100%