Navigo — это лёгкая клиентская библиотека маршрутизации для JavaScript, которая позволяет управлять переходами между страницами или компонентами в одностраничных приложениях (SPA). Одной из ключевых возможностей является использование относительных переходов, когда адрес назначения определяется относительно текущего маршрута, а не через полный абсолютный путь.
Относительные переходы особенно полезны при построении многоуровневой навигации: вкладки, вложенные маршруты, динамические сегменты URL. Это упрощает поддержку приложения при изменении структуры путей, поскольку ссылки строятся на основе текущего контекста.
Для работы с Navigo создаётся экземпляр класса:
import Navigo from 'navigo';
const router = new Navigo('/', { hash: true });
Здесь первый параметр '/' задаёт базовый путь,
относительно которого будут строиться маршруты. Опция
hash: true позволяет использовать хеш-навигацию, что удобно
для старых браузеров и при статическом хостинге.
Для простого маршрута используется метод on:
router.on('/users', () => {
console.log('Список пользователей');
});
router.on('/users/:id', (params) => {
console.log('Профиль пользователя', params.id);
});
Сегменты :id являются динамическими, и их значение можно
получить через объект params.
navigateМетод navigate позволяет инициировать переход по
маршруту. Чтобы использовать относительные пути, достаточно передать
путь без ведущего слэша:
// Текущий маршрут: /users
router.navigate('edit'); // Результат: /users/edit
router.navigate('../'); // Результат: / (подняться на один уровень)
router.navigate('../. ./'); // Результат: / (если выше уровня нет)
Важно: Навигация относительно текущего маршрута
зависит от структуры URL и используемых сегментов. Относительный путь
'../' всегда указывает на родительский уровень, а
'./' или отсутствие префикса — на текущий уровень.
Вложенные маршруты строятся через цепочку on или при
помощи подмаршрутов:
router
.on('/dashboard', () => {
console.log('Главная панель');
})
.on('/dashboard/settings', () => {
console.log('Настройки панели');
});
Переход внутри /dashboard может быть выполнен как
относительный:
router.navigate('settings'); // /dashboard/settings
router.navigate('../'); // / (возврат на уровень выше)
Для более сложной вложенной структуры полезно использовать относительные переходы с несколькими уровнями:
// Текущий маршрут: /dashboard/settings/profile
router.navigate('../. ./analytics'); // Переход на /dashboard/analytics
Динамические сегменты URL могут использоваться совместно с относительными переходами. Например:
router.on('/projects/:projectId/tasks/:taskId', (params) => {
console.log('Текущая задача:', params.taskId);
});
// Переход на следующий таск
router.navigate('../next'); // Переход на /projects/:projectId/tasks/next
Относительные пути позволяют не повторять полный путь, что повышает удобство при навигации по динамическим маршрутам.
Navigo поддерживает передачу query-параметров при навигации:
router.navigate('settings?tab=security');
Если использовать относительный путь:
router.navigate('../settings?tab=security');
Путь будет рассчитан относительно текущего маршрута, а параметры добавлены к URL автоматически.
../ осторожно: важно
отслеживать текущий уровень вложенности, чтобы избежать переходов за
пределы корня.router.resolve(): позволяет отлаживать построение
URL перед реальной навигацией.router.on('/blog', () => {
console.log('Список постов');
});
router.on('/blog/:id', (params) => {
console.log('Просмотр поста', params.id);
});
// Текущий URL: /blog/42
router.navigate('../'); // Переход на /blog
router.navigate('./edit'); // Переход на /blog/42/edit
router.navigate('../. ./'); // Переход на /
Такой подход позволяет строить чистую и предсказуемую навигацию, минимизируя дублирование абсолютных путей и повышая гибкость приложения.