TanStack Router — современный инструмент для управления маршрутами в приложениях на JavaScript и TypeScript. Основное преимущество библиотеки заключается в гибкости маршрутизации, поддержке вложенных маршрутов, асинхронной загрузки данных и удобной навигации как абсолютной, так и относительной.
Абсолютная навигация предполагает переход к маршруту, указывая его
полный путь от корня приложения. В TanStack Router это реализуется с
помощью метода navigate объекта маршрутизатора, передавая
строковый путь:
router.navigate('/users/42/profile');
Здесь /users/42/profile — абсолютный
путь, начинающийся с корня /. Такой подход удобен,
когда требуется перейти к конкретному маршруту, независимо от текущего
положения пользователя в иерархии маршрутов.
router.navigate({
to: '/users/:id/profile',
params: { id: 42 }
});
router.navigate({
to: '/search',
search: { q: 'TanStack' }
});
Относительная навигация ориентирована на текущее положение
пользователя в дереве маршрутов. В TanStack Router она реализуется через
использование специальных сокращений (.., .)
или через передачу относительных маршрутов объектом конфигурации.
router.navigate('../profile');
Здесь .. обозначает переход на один уровень вверх от
текущего маршрута, а . — оставление на текущем уровне.
Относительные маршруты особенно полезны при работе с вложенными
маршрутизаторами, когда абсолютные пути становятся громоздкими.
router.navigate('..');
router.navigate('./settings');
router.navigate('./settings', {
params: { tab: 'privacy' }
});
Относительная навигация поддерживает те же возможности передачи параметров, что и абсолютная. Важным отличием является контекст текущего маршрута:
router.navigate('./edit', {
params: { id: 7 },
search: { ref: 'dashboard' }
});
params автоматически подставляются в шаблон маршрута
относительно текущего уровня.search добавляет query-параметры к URL, сохраняя
контекст текущего маршрута.TanStack Router поддерживает иерархическую структуру маршрутов. В таких случаях относительная навигация позволяет избежать ошибок при изменении структуры маршрутов:
const route = router.getRoute('users.$userId');
router.navigate('./posts', {
params: { userId: route.params.userId }
});
users.$userId — динамический сегмент../posts позволяет перейти к разделу
постов конкретного пользователя, не задавая абсолютный путь
/users/42/posts.| Характеристика | Абсолютная навигация | Относительная навигация |
|---|---|---|
| Путь | Полный путь от корня / |
Относительно текущего маршрута |
| Удобство при вложенных маршрутах | Менее гибкая | Более гибкая и читаемая |
| Передача параметров | Через объект params |
Через объект params |
| Query-параметры | Можно напрямую | Можно напрямую |
Навигация в TanStack Router строится вокруг понимания структуры маршрутов и контекста текущего положения. Абсолютные и относительные маршруты дополняют друг друга, обеспечивая гибкость и читаемость кода, а также упрощая поддержку динамических приложений с большим количеством вложенных страниц.