Convenções de Roteamento no App Router do Next.js
O App Router do Next.js introduz diversas convenções para definir rotas e gerenciar metadados de forma eficiente.
Arquivos de roteamento
Os arquivos de roteamento são usados para definir layouts, páginas, e interfaces de usuário específicas, além de gerenciar pontos de API.
Layout (layout.[js/jsx/tsx]
)
Define o layout da página. Este arquivo é utilizado para componentes que devem estar presentes em várias páginas, como cabeçalhos ou rodapés.
// app/layout.jsx
export default function Layout({ children }) {
return (
<div>
<Header />
{children}
<Footer />
</div>
);
}
Page (page.[js/jsx/tsx]
)
Define uma página específica. Cada arquivo page
corresponde a uma rota.
// app/home/page.jsx
export default function HomePage() {
return <h1>Home Page</h1>;
}
Loading UI (loading.[js/jsx/tsx]
)
Define uma interface de carregamento que é exibida enquanto os dados ou componentes estão sendo carregados.
// app/loading.jsx
export default function Loading() {
return <div>Loading...</div>;
}
Not found UI (not-found.[js/jsx/tsx]
)
Define a interface para quando uma rota não é encontrada (404).
// app/not-found.jsx
export default function NotFound() {
return <h1>Page Not Found</h1>;
}
Error UI (error.[js/jsx/tsx]
)
Define a interface de erro específica para a rota atual.
// app/error.jsx
export default function Error() {
return <h1>An error occurred</h1>;
}
Global error UI (global-error.[js/jsx/tsx]
)
Define a interface de erro global, exibida para erros que não são específicos de uma rota.
// app/global-error.jsx
export default function GlobalError() {
return <h1>Global Error</h1>;
}
API end-point (route.[js/jsx/tsx]
)
Define um ponto de extremidade (endpoint) de API.
// app/api/hello/route.js
export default function handler(req, res) {
res.status(200).json({ message: 'Hello, world!' });
}
Re-rendered layout (template.[js/jsx/tsx]
)
Define um layout que pode ser re-renderizado em diferentes páginas.
// app/template.jsx
export default function Template({ children }) {
return <div className="template">{children}</div>;
}
Parallel route fallback page (default.[js/jsx/tsx]
)
Define uma página fallback para rotas paralelas.
// app/default.jsx
export default function DefaultPage() {
return <h1>Default Page</h1>;
}
Rotas aninhadas
As rotas aninhadas são definidas por diretórios e subdiretórios, que representam segmentos de rota.
folder
: Representa um segmento de rota.
app/about/page.jsx -> /about
folder/folder
: Representa um segmento de rota aninhado.
app/about/team/page.jsx -> /about/team
Rotas Dinâmicas
Rotas dinâmicas permitem capturar valores de segmentos da URL.
[folder]
: Captura um segmento de rota dinâmica.
app/[user]/page.jsx -> /user/:user
[...folder]
: Captura todos os segmentos de rota restantes (rota catch-all).
app/[...all]/page.jsx -> /**/*
[[...folder]]
: Captura todos os segmentos de rota restantes, incluindo uma rota opcional.
app/[[...optional]]/page.jsx -> /optional*?
Grupos de rotas e pastas privadas
Grupos de rotas e pastas privadas permitem organizar rotas sem afetar a estrutura de roteamento.
(folder)
: Agrupa rotas sem afetar o roteamento.
app/(admin)/dashboard/page.jsx -> /dashboard
_folder
: Exclui a pasta e todos os segmentos filhos do roteamento.
app/_internal -> não gera rotas
Rotas paralelas e interceptadas
Rotas paralelas e interceptadas permitem a criação de slots nomeados e a interceptação de rotas.
@folder
: Define um slot nomeado.
app/@auth/page.jsx -> /auth
(.)folder
: Intercepta a rota no mesmo nível.
app/(.)settings/page.jsx -> /settings
(..)folder: Intercepta a rota um nível acima.
app/(..)/page.jsx -> /
(..)(..)folder
: Intercepta a rota dois níveis acima.
app/(..)(..)/page.jsx -> /
(...)folder
: Intercepta a rota desde a raiz.
app/(...)/page.jsx -> /
Conclusão
As convenções de roteamento no App Router do Next.js são projetadas para oferecer flexibilidade e organização ao definir rotas e gerenciar metadados. Com essas convenções, você pode criar facilmente estruturas de navegação complexas e personalizadas para sua aplicação.