Иерархия маршрутов

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 и fallback маршруты

Для обработки динамических и вложенных маршрутов можно использовать 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');
  • Можно использовать относительные пути при работе внутри вложенных маршрутов.
  • Поддерживается обновление истории браузера, что делает переходы плавными и без перезагрузки страницы.

Применение иерархии для сложных SPA

Иерархические маршруты позволяют:

  • Разделять административные и пользовательские панели.
  • Создавать многоуровневую навигацию без дублирования кода.
  • Легко внедрять динамические маршруты с параметрами, сохраняя логическую структуру.
  • Обрабатывать wildcard и fallback пути, предотвращая ошибки при неизвестных URL.

Практические рекомендации

  1. Разделять маршруты по модулям — каждый логический блок приложения имеет свой набор маршрутов.
  2. Использовать именованные маршруты — для генерации ссылок без привязки к конкретному URL.
  3. Применять wildcard для универсальных обработчиков — для страниц 404 или динамических разделов.
  4. Следить за порядком определения маршрутов — более специфичные маршруты должны идти перед wildcard и общими путями.

Иерархическая маршрутизация в Navigo делает архитектуру SPA структурированной, удобной для поддержки и масштабируемой, обеспечивая чистый и логичный код. Такой подход упрощает управление состоянием приложения и обработку сложных маршрутов.