Navigo — это легковесная библиотека для управления маршрутизацией в одностраничных приложениях (SPA) на JavaScript. Она позволяет связывать URL-пути с функциями обработки, обеспечивая динамическое обновление содержимого без перезагрузки страницы. Основная концепция клиентской маршрутизации заключается в том, что навигация внутри приложения управляется JavaScript, а не сервером.
Для начала работы создается экземпляр маршрутизатора:
import Navigo from 'navigo';
const router = new Navigo('/', { hash: true });
'/' задает базовый путь
приложения.hash: true указывает на использование
хеш-маршрутов (#) вместо обычных URL. Это важно для
поддержки старых браузеров без HTML5 History API.Маршруты связываются с функциями, которые вызываются при переходе по соответствующему пути:
router.on({
'/': () => {
console.log('Главная страница');
},
'/about': () => {
console.log('Страница о проекте');
},
'/products/:id': (params) => {
console.log(`Продукт с ID: ${params.id}`);
}
});
'/', '/about')
соответствуют фиксированным URL.:id) позволяют обрабатывать
динамические сегменты пути. Параметры автоматически передаются в
обработчик в объекте params.Navigo предоставляет метод navigate для перехода между
маршрутами без перезагрузки страницы:
router.navigate('/about');
Это вызывает соответствующий обработчик маршрута, обновляя состояние приложения.
Чтобы ссылки <a> корректно работали с Navigo,
используется метод link:
document.addEventListener('click', (event) => {
const target = event.target.closest('a');
if (target) {
event.preventDefault();
router.navigate(target.getAttribute('href'));
}
});
Этот подход позволяет перехватывать клики по ссылкам и использовать маршрутизатор вместо стандартной навигации браузера.
Для маршрутов, которые не определены явно, используется метод
notFound:
router.notFound(() => {
console.log('Страница не найдена');
});
Это обеспечивает централизованное управление ошибками навигации и отображение страницы 404.
Navigo поддерживает хуки — функции, выполняемые до или после перехода на маршрут:
router.hooks({
before: (done, params) => {
console.log('Перед переходом', params);
done();
},
after: (params) => {
console.log('После перехода', params);
}
});
before принимает функцию done, которую
необходимо вызвать для продолжения навигации.after выполняется после того, как маршрут обработан
и контент обновлен.Для удобства можно создавать подмаршруты с общими префиксами:
router.on('/admin', {
'/dashboard': () => console.log('Панель администратора'),
'/users': () => console.log('Список пользователей')
});
Такое разделение облегчает поддержку больших приложений и структурирование маршрутов.
Navigo позволяет использовать регулярные выражения для параметров:
router.on('/products/:id(\\d+)', (params) => {
console.log(`Только числовой ID: ${params.id}`);
});
Navigo использует History API для управления историей браузера.
Методы navigate и перехваты ссылок обновляют URL без
перезагрузки страницы, а возврат назад (back) и вперед
(forward) полностью интегрируются с историей:
router.back();
router.forward();
hash: true) —
используют # в URL, просты в реализации и совместимы с
любыми серверами.hash: false) — чистые URL
без #, позволяют SEO-оптимизацию, но требуют серверной
поддержки для корректной обработки всех маршрутов.notFound.Navigo обеспечивает гибкую клиентскую маршрутизацию, минимизируя необходимость обращения к серверу при смене страниц, и является мощным инструментом для построения современных SPA-приложений.