Navigo — это лёгкая библиотека для маршрутизации в JavaScript,
предназначенная для управления навигацией в одностраничных приложениях
(SPA). Центральным элементом является конструктор Navigo,
который создаёт объект роутера и предоставляет методы для настройки
маршрутов и обработки переходов.
import Navigo from 'navigo';
const router = new Navigo('/');
Параметры конструктора:
root (строка) — корневой путь приложения. По умолчанию
'/'. Используется для корректной обработки маршрутов, если
приложение находится не в корне домена.useHash (булевый) — указывает, следует ли использовать
хэш-маршрутизацию (true) или HTML5 History API
(false). Значение по умолчанию false.hash (строка) — определяет префикс хэша, например
'#' или '#!'. Применимо только при
useHash = true.Пример создания роутера с хэш-навигацией:
const router = new Navigo('/', true, '#!');
Метод on используется для привязки обработчиков к
маршрутам. Он принимает путь и функцию-обработчик.
router.on('/home', () => {
console.log('Главная страница');
});
router.on('/about', () => {
console.log('О странице');
});
Поддержка параметров маршрута осуществляется с
помощью двоеточия ::
router.on('/user/:id', ({ data }) => {
console.log(`Пользователь с ID: ${data.id}`);
});
Можно задавать несколько маршрутов сразу:
router.on({
'/home': () => console.log('Главная'),
'/about': () => console.log('О сайте')
});
Для маршрутов по умолчанию используется * или метод
notFound:
router.notFound(() => {
console.log('Страница не найдена');
});
Метод navigate(path) инициирует переход на указанный
маршрут:
router.navigate('/about');
Если включена хэш-навигация, URL автоматически обновляется с префиксом хэша.
Метод resolve() позволяет вручную запустить обработку
текущего URL, что полезно при динамическом изменении маршрутов:
router.resolve();
Navigo поддерживает хуки before и after,
которые вызываются до и после обработки маршрута.
router.on('/dashboard', () => {
console.log('Панель управления');
}).before(() => {
console.log('Проверка авторизации...');
return true; // или false для блокировки перехода
}).after(() => {
console.log('Маршрут обработан');
});
Хуки позволяют реализовать:
Navigo позволяет использовать регулярные выражения для более гибкого сопоставления маршрутов:
router.on('/product/:id(\\d+)', ({ data }) => {
console.log(`ID продукта: ${data.id}`);
});
Параметр :id будет соответствовать только числовым
значениям.
Для необязательных параметров используется знак ?:
router.on('/search/:query?', ({ data }) => {
console.log(`Запрос поиска: ${data.query || 'пусто'}`);
});
Методы объекта роутера:
updatePageLinks() — сканирует ссылки на странице с
атрибутом href и автоматически привязывает их к Navigo.
Позволяет работать без перезагрузки страницы.destroy() — удаляет все обработчики маршрутов и
возвращает роутер в исходное состояние.pause() и resume() — приостанавливают и
возобновляют обработку маршрутов.router.updatePageLinks();
router.pause();
router.resume();
Navigo поддерживает создание групп маршрутов, что удобно для структурированных SPA.
router.on({
'/admin/users': () => console.log('Список пользователей'),
'/admin/settings': () => console.log('Настройки администратора')
});
Можно использовать функции для генерации вложенных маршрутов:
const adminRoutes = {
'/users': () => console.log('Пользователи'),
'/settings': () => console.log('Настройки')
};
router.on('/admin/*', ({ url }) => {
const path = url.replace('/admin', '');
adminRoutes[path]?.();
});
При использовании HTML5 History API маршруты работают без хэшей.
Навигация обновляет URL через pushState без перезагрузки
страницы. Это делает приложение ближе к классическим многостраничным
сайтам с сохранением возможности SPA.
const router = new Navigo('/', false);
router.on('/profile', () => console.log('Профиль пользователя'));
router.navigate('/profile');
Метод navigate() автоматически обновляет URL и вызывает
соответствующий обработчик.
before и after для промежуточной
логики.navigate,
resolve, updatePageLinks,
destroy, pause, resume.Navigo сочетает лаконичность и гибкость, обеспечивая полноценное управление навигацией в SPA, без громоздких настроек и сложных зависимостей.