Файлы роутинга
Правила для специальных файлов App Router (page.tsx, layout.tsx, error.tsx, not-found.tsx и др.) — чем наш подход отличается от дефолтного.
Организация
page.tsx— тонкий файл: толькоmetadataи рендер экрана. Логика, стили и зависимости живут в экране, не вpage.tsx.error.tsxиnot-found.tsxделегируют разметку экранам по тому же принципу.layout.tsx— точка подключения провайдеров и глобальных стилей. Вёрстка layout-обёрток выносится в слойlayouts/.- Стили в файлах роутинга не используются — стилизация только внутри вызываемых компонентов.
Реализация
- Каждый
page.tsxэкспортируетmetadataсtitle— он подставляется в шаблон корневого layout (%s | App). - Корневой
layout.tsxзадаётmetadataсtitle.template,description,metadataBaseи OpenGraph-настройками.
Примеры
src/app/profile/[id]/page.tsx
tsx
import type { Metadata } from 'next'
import { ProfileScreen } from '@/screens/profile'
export const metadata: Metadata = {
title: 'Профиль',
description: 'Страница профиля пользователя',
}
type ProfilePageProps = {
params: Promise<{ id: string }>
}
export default async function ProfilePage({ params }: ProfilePageProps) {
const { id } = await params
return <ProfileScreen id={id} />
}src/app/error.tsx
tsx
'use client'
import { ErrorScreen } from '@/screens/error'
type ErrorPageProps = {
error: Error & { digest?: string }
reset: () => void
}
const ErrorPage = ({ error, reset }: ErrorPageProps) => {
return <ErrorScreen error={error} reset={reset} />
}
export default ErrorPage