Файловый роутинг — это подход к организации маршрутов, при котором структура URL напрямую отражается в файловой системе проекта. TanStack Router реализует эту концепцию, позволяя строить маршруты декларативно и масштабируемо, без необходимости вручную прописывать все пути.
Каждый файл в директории маршрутов соответствует отдельному маршруту приложения. Например, файл:
/routes/dashboard.jsx
автоматически становится маршрутом /dashboard. Если
внутри директории создаются вложенные папки:
/routes/dashboard/analytics.jsx
то путь к маршруту формируется как /dashboard/analytics.
Такой подход упрощает поддержку проекта, так как визуальная структура
папок отражает архитектуру URL.
TanStack Router поддерживает динамические сегменты через квадратные скобки. Например:
/routes/users/[userId].jsx
создаёт маршрут /users/:userId, где userId
доступен через объект параметров маршрута. Динамические сегменты можно
комбинировать с вложенными маршрутами:
/routes/users/[userId]/settings.jsx
результирующий путь будет /users/:userId/settings.
Файлы с названием index.jsx обрабатываются как индекс
маршрута родительской папки. Пример:
/routes/dashboard/index.jsx
соответствует маршруту /dashboard. Это полезно для
определения базового компонента для вложенных маршрутов.
TanStack Router позволяет использовать layout-компоненты для групп маршрутов. Layout размещается в папке и оборачивает все дочерние маршруты. Пример структуры:
/routes/dashboard/_layout.jsx
/routes/dashboard/analytics.jsx
/routes/dashboard/reports.jsx
Здесь _layout.jsx будет общим контейнером для
/dashboard/analytics и /dashboard/reports,
обеспечивая единый каркас интерфейса, навигацию и другие общие
элементы.
Вложенные маршруты в файловой системе создаются автоматически. Важно,
чтобы каждый вложенный маршрут экспортировал компонент с именованным
экспортом Component или дефолтным экспортом. Пример:
// routes/dashboard/analytics.jsx
export default function Analytics() {
return <div>Аналитика</div>;
}
TanStack Router на основе структуры файлов строит дерево маршрутов,
которое затем можно использовать в приложении через
<Router>.
Каждый маршрут может экспортировать функции loader и
action, которые TanStack Router автоматически вызывает при
переходе на соответствующий путь. Файловая структура облегчает
распределение этих функций:
// routes/users/[userId].jsx
export async function loader({ params }) {
const response = await fetch(`/api/users/${params.userId}`);
return response.json();
}
loader загружает данные до рендера компонента, что
обеспечивает согласованность интерфейса и улучшает UX.
Файловый роутинг естественным образом поддерживает разделение кода. Каждый компонент маршрута загружается динамически при посещении соответствующего URL. Это снижает первоначальный размер бандла и ускоряет загрузку приложения.
Главное преимущество файлового роутинга — автоматическая синхронизация структуры URL с файловой системой. Это минимизирует ошибки при ручной настройке маршрутов, упрощает рефакторинг и масштабирование приложения.
Структура папок становится документацией по маршрутам, а вложенные layout-компоненты позволяют централизованно управлять общими элементами интерфейса.
Простейшая структура проекта:
/routes
index.jsx -> '/'
about.jsx -> '/about'
dashboard/
index.jsx -> '/dashboard'
analytics.jsx -> '/dashboard/analytics'
reports.jsx -> '/dashboard/reports'
_layout.jsx -> общий layout для dashboard
users/
[userId].jsx -> '/users/:userId'
[userId]/settings.jsx -> '/users/:userId/settings'
Каждый маршрут экспортирует компонент и при необходимости функции
loader или action, что обеспечивает готовую
архитектуру для больших SPA-приложений.
Файловый роутинг в TanStack Router создаёт единообразную, читаемую и легко расширяемую систему маршрутов, которая напрямую отражает физическую структуру проекта, облегчая поддержку и масштабирование современных веб-приложений.