Capítulo 171 de 456
O módulo next/root-params expõe getters async para ler parâmetros de segmentos dinâmicos que ficam ACIMA do root layout, acessíveis de qualquer Server Component sem prop drilling.
app/[lang]/layout.tsx → lang é root param). Segmentos abaixo do root layout são acessados via prop params normal.app/[locale] gera export locale de next/root-params.[post-slug]) não são suportados, causam erro em dev/build.use cache no lugar.'use cache', só os root params efetivamente usados entram na cache key, não todos os segmentos dinâmicos da rota.undefined.// app/[lang]/layout.tsx
import { lang } from 'next/root-params'
export default async function RootLayout(props: LayoutProps<'/[lang]'>) {
return (
<html lang={await lang()}>
<body>{props.children}</body>
</html>
)
}
lang direto no root layout, sem passar via props.// Uso em utilitário compartilhado, sem prop drilling
import { lang } from 'next/root-params'
export async function getTranslations() {
const language = await lang()
return import(`@/locales/${language}.json`)
}
// generateStaticParams com Cache Components — cada root param precisa de ao menos um valor
export async function generateStaticParams() {
return [{ lang: 'en' }, { lang: 'fr' }]
}
| Segment type | Example | Return type |
|---|---|---|
| Dynamic | [id] | string |
| Catch-all | [...path] | string[] |
| Optional catch-all | [[...path]] | string[] | undefined |
| Version | Changes |
|---|---|
| v16.3.0 | next/root-params introduzido |
next/root-params só funciona em Server Components.unstable_cache: erro em runtime; migre para use cache.[post-slug] não vira identificador JS válido, evite.locale/lang por toda a árvore de componentes.params normal.undefined — trate esse caso.'use cache', evitando invalidação por segmentos não utilizados.unstable_cache).