Navigo — это лёгкая библиотека для маршрутизации на стороне клиента в JavaScript, обеспечивающая удобное управление URL и отображением контента без перезагрузки страницы. Основным элементом является роут, который связывает URL-путь с функцией-обработчиком.
Для начала необходимо создать объект Navigo. Конструктор принимает базовый URL и опции конфигурации.
import Navigo from 'navigo';
const router = new Navigo('/', {
hash: true, // Использование hash-based маршрутов
noMatchWarning: true // Логирование предупреждений при отсутствии маршрута
});
hash: true — маршруты будут работать через хэш (#), что
полезно для статических серверов.noMatchWarning: true — вывод предупреждений в консоль
при несоответствии маршрута.Роуты задаются через метод on(path, handler):
router.on('/home', () => {
console.log('Главная страница');
});
router.on('/about', () => {
console.log('Страница "О нас"');
});
Ключевые моменты:
'/home') или динамическим
('/user/:id').router.on('/user/:id', (params) => {
console.log(`Пользователь с ID: ${params.id}`);
});
Для организации большого количества маршрутов удобно использовать
группы. Метод on принимает объект с
ключами-путями и значениями-функциями:
router.on({
'/home': () => console.log('Главная'),
'/about': () => console.log('О нас'),
'/contact': () => console.log('Контакты')
});
Это улучшает читаемость и структурирует код, особенно когда роутов много.
Navigo поддерживает динамические сегменты (:param) и
опциональные сегменты (:param?):
router.on('/blog/:postId/:commentId?', (params) => {
console.log('Post ID:', params.postId);
if (params.commentId) console.log('Comment ID:', params.commentId);
});
? сегмент становится
опциональным.Для точного соответствия можно использовать регулярные выражения в пути:
router.on('/order/:orderId(\\d+)', (params) => {
console.log('Order ID:', params.orderId);
});
\\d+ гарантирует, что параметр состоит только из
цифр.Navigo позволяет назначать несколько функций для одного маршрута, используя массив:
router.on('/dashboard', [
() => console.log('Инициализация Dashboard'),
() => console.log('Загрузка данных')
]);
Функции выполняются по порядку.
Можно присвоить роуту имя для удобного программного перехода:
router.on('/profile/:id', { as: 'profile', uses: (params) => console.log(params.id) });
router.navigate('profile', { id: 42 });
as задаёт имя маршрута.uses — обработчик, альтернативный синтаксис.navigate позволяет переходить к маршруту по имени и
передавать параметры.Метод notFound задаёт глобальный обработчик для всех
несопоставленных URL:
router.notFound(() => {
console.log('Страница не найдена');
});
#,
совместимы с любыми серверами.#.
Включается опцией { hash: false } и требует корректной
настройки сервера.const router = new Navigo('/', { hash: false });
Методы updatePageLinks и resolve
используются для управления ссылками и активации маршрутов:
router.updatePageLinks(); // Перехватывает клики по ссылкам <a>
router.resolve(); // Запускает роутер на текущем URL
Это особенно важно при динамически создаваемых ссылках или после AJAX-загрузки контента.
Для сложных приложений удобно использовать вложенные маршруты:
router.on('/admin', () => console.log('Админка'))
.on('/admin/users', () => console.log('Список пользователей'))
.on('/admin/settings', () => console.log('Настройки'));
Вложенные роуты позволяют структурировать логику приложения по разделам и модулям.
notFound
для страниц 404 и default для корневого маршрута.updatePageLinks для корректной работы SPA после изменений
DOM.const router = new Navigo('/', { hash: true });
router.on({
'/': () => console.log('Главная'),
'/about': () => console.log('О нас'),
'/user/:id': (params) => console.log(`Пользователь ${params.id}`),
'/blog/:postId/:commentId?': (params) => {
console.log('Пост', params.postId);
if (params.commentId) console.log('Комментарий', params.commentId);
}
}).notFound(() => console.log('Страница не найдена'));
router.updatePageLinks();
router.resolve();
Этот пример демонстрирует полное использование динамических сегментов, опциональных параметров, группировки и обработки отсутствующих маршрутов.
Организация роутов в Navigo позволяет создавать структурированные, читаемые и масштабируемые маршруты, обеспечивая плавную работу одностраничных приложений и легкость поддержки кода.