Aguardando Parâmetros de Rota
Parte da seção Essenciais do Next.js do Journey de React da Coddy — lição 24 de 47.
Uma rota dinâmica passa o segmento da URL para a sua página por meio de params. No Next 15, há um detalhe importante que vale a pena memorizar:
params é uma promise.
// app/menu/[slug]/page.jsx
export default async function DishPage({ params }) {
const { slug } = await params;
// /menu/carbonara -> slug === 'carbonara'
}Esqueça o await e nada quebra, o que é exatamente o que torna isso traiçoeiro. Desestruturar uma Promise apenas dá undefined:
const { slug } = params; // undefined
const dish = await getDish(slug); // não busca nadaA página ainda é renderizada. Ela está apenas em branco, ou cheia de fallbacks, e você sai procurando na sua camada de dados por um bug que nunca esteve lá.
A mesma regra se aplica a searchParams. Ambos são promises, ambos precisam ser aguardados e ambos estão disponíveis apenas para componentes de servidor async, mais um motivo pelo qual a página que você acabou de escrever teve que ser async.
Por que usar promises afinal? Para que o Next.js possa começar a renderizar as partes da sua página que não dependem da URL antes mesmo de terminar de processar as partes que dependem.
Desafio
Fácilapp/menu/[slug]/page.jsx está quase certo, mas ele nunca aguarda por params com await, então cada prato retorna como Unknown dish.
- Use
awaitemparamsantes da desestruturação:const { slug } = await params;
lib/data.js e a página inicial estão bloqueados. Visitar /menu/carbonara deve exibir Carbonara em #dish-name e seu preço em #dish-price.
Experimente você mesmo
import './globals.css';
export const metadata = {
title: 'My App',
};
export default function RootLayout({ children }) {
return (
<html lang="en">
<body>
{children}
</body>
</html>
);
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Essenciais do Next.js
1Por que usar o Next.js
O que o Next.js adicionaA pasta AppSua primeira páginaRecapitulação: Por que usar o Next.js2Roteamento e Links
Pastas São RotasRotas AninhadasVinculando PáginasRotas DinâmicasPáginas Não EncontradasRecapitulação: Roteamento5Dados no Servidor
Componentes AssíncronosAguardando Parâmetros de RotaDuas Buscas ao Mesmo TempoEstados de CarregamentoTratamento de ErrosRecapitulando: Busca de Dados