Navigo — это современный роутер для JavaScript, который позволяет управлять навигацией на стороне клиента без полной перезагрузки страницы. Одним из ключевых компонентов работы роутера является интеграция с историей браузера. Navigo использует History API браузера для реализации маршрутизации, что позволяет менять URL и состояние приложения, не перезагружая страницу, и обеспечивать корректную работу кнопок «Назад» и «Вперед».
Navigo поддерживает два основных режима:
Hash mode — URL с хэшем (/#/home).
Используется в старых браузерах или когда сервер не поддерживает History
API. Изменение маршрута происходит через
window.location.hash.
History mode — HTML5 History API
(/home). Позволяет изменять URL без перезагрузки страницы
через методы pushState, replaceState и
отслеживать события popstate.
Для активации History API используется опция
useHash: false при создании экземпляра Navigo:
const router = new Navigo('/', { useHash: false });
'/‘ — корневая точка приложения, от которой строятся
все маршруты.useHash: false — переключает роутер на History
API.Метод router.navigate(path) изменяет URL и добавляет
новую запись в историю браузера, аналогично вызову
history.pushState():
router.navigate('/about');
/about.popstate не вызывается при программной
навигации, но роутер отрабатывает соответствующий обработчик
маршрута.router.navigate('/profile', { state: { userId: 42 } });
Метод router.navigate(path, { replace: true }) заменяет
текущую запись в истории, аналог
history.replaceState():
router.navigate('/login', { replace: true });
Navigo автоматически слушает событие popstate, которое
возникает при нажатии кнопок «Назад» и «Вперед». Обработчики маршрутов
вызываются автоматически, поэтому дополнительные подписки не
требуются.
router.on('/dashboard', () => {
console.log('Dashboard открыт через историю браузера');
});
Особенности:
popstate не срабатывает, вызывается только обработчик
маршрута.popstate инициирует
вызов маршрута с текущим URL.History API позволяет хранить состояние страницы
вместе с URL. Navigo поддерживает это через объект
state:
router.navigate('/settings', { state: { tab: 'privacy' } });
router.lastRouteResolved().data или
history.state.Navigo позволяет эмулировать действия браузера:
// Программный переход к маршруту
router.navigate('/home');
// Возврат на предыдущий маршрут
window.history.back();
// Переход вперёд
window.history.forward();
history.back() и history.forward()
корректно отрабатываются роутером, вызывая соответствующие обработчики
маршрутов.При использовании History API важно правильно указывать базовый путь приложения. Он задаётся при создании Navigo:
const router = new Navigo('/app', { useHash: false });
/app — базовый путь. Все маршруты будут строиться
относительно него (/app/home,
/app/profile).Navigo позволяет определить обработчик для несуществующих маршрутов:
router.notFound(() => {
console.log('Маршрут не найден');
});
replace: true для редиректов на
страницу ошибки без увеличения истории.Navigo поддерживает маршруты с параметрами и query-параметрами, которые интегрируются с историей:
router.on('/user/:id', ({ data }) => {
console.log(`Открыт профиль пользователя ${data.id}`);
});
router.navigate('/user/123');
/user/123.data доступен в обработчике маршрута.При History API важно, чтобы сервер был настроен на корректную отдачу SPA:
# остаётся постоянным.Navigo обеспечивает полную интеграцию с историей браузера, позволяя строить полноценные SPA с сохранением привычного поведения навигации. Управление URL, состоянием страницы и динамическими маршрутами реализуется через простой и мощный API, основанный на стандартном History API браузера.