Navigo — это лёгкая библиотека маршрутизации для JavaScript, позволяющая организовать управление состоянием URL и отображением компонентов на клиентской стороне. Одной из ключевых возможностей является поддержка иерархии маршрутов, что обеспечивает структурированное и гибкое управление навигацией в приложении.
Иерархические маршруты позволяют группировать пути по логическим блокам. В Navigo это реализуется с помощью вложенных объектов маршрутов или через комбинацию базового пути и относительных подмаршрутов.
Пример структуры:
const router = new Navigo('/');
router.on({
'dashboard': () => console.log('Главная панель'),
'dashboard/settings': () => console.log('Настройки панели'),
'dashboard/profile': () => console.log('Профиль пользователя')
}).resolve();
Здесь dashboard выступает как родительский маршрут, а
dashboard/settings и dashboard/profile —
вложенные маршруты. Такой подход упрощает обработку связанных разделов
приложения.
Вложенные маршруты могут содержать динамические сегменты, позволяя передавать переменные через URL:
router.on({
'dashboard/user/:id': ({ data }) => {
console.log('ID пользователя:', data.id);
},
'dashboard/user/:id/settings': ({ data }) => {
console.log('Настройки пользователя с ID:', data.id);
}
}).resolve();
:id — динамический сегмент, который извлекается в
объект data.Navigo позволяет описывать маршруты через массив объектов, что повышает читаемость кода и упрощает масштабирование:
const routes = [
{ path: 'dashboard', handler: () => console.log('Главная панель') },
{ path: 'dashboard/settings', handler: () => console.log('Настройки панели') },
{ path: 'dashboard/profile', handler: () => console.log('Профиль пользователя') }
];
routes.forEach(route => router.on(route.path, route.handler));
router.resolve();
Такой подход особенно полезен для больших приложений, где количество маршрутов может исчисляться десятками и сотнями.
Для обработки динамических и вложенных маршрутов можно использовать
wildcard (*), позволяя ловить все пути под
определённым сегментом:
router.on({
'dashboard/*': (params) => console.log('Любой вложенный маршрут:', params)
}).resolve();
Navigo поддерживает именованные маршруты, что облегчает работу с иерархией и упрощает генерацию ссылок:
router.on({
'dashboard': { as: 'dashboard', uses: () => console.log('Главная панель') },
'dashboard/profile': { as: 'profile', uses: () => console.log('Профиль пользователя') }
});
console.log(router.generate('profile')); // /dashboard/profile
as задаёт имя маршрута.generate позволяет получать URL по имени маршрута,
сохраняя иерархическую структуру без жесткой привязки к строкам.Navigo предоставляет метод navigate, который работает с
иерархическими маршрутами:
router.navigate('dashboard/profile');
Иерархические маршруты позволяют:
Иерархическая маршрутизация в Navigo делает архитектуру SPA структурированной, удобной для поддержки и масштабируемой, обеспечивая чистый и логичный код. Такой подход упрощает управление состоянием приложения и обработку сложных маршрутов.