Navigo — это лёгкая клиентская библиотека для роутинга на стороне браузера, позволяющая управлять навигацией в одностраничных приложениях (SPA) без перезагрузки страницы. В основе работы лежит сопоставление URL с обработчиками маршрутов, что делает библиотеку особенно удобной для динамических интерфейсов.
Навигация осуществляется через объект роутера, создаваемый следующим образом:
import Navigo from 'navigo';
const router = new Navigo('/', { hash: true });
'/') указывает базовый путь
приложения.hash: true включает поддержку хеш-маршрутов
(/#/route), что упрощает работу с сервером, который не
поддерживает history API.Маршруты задаются методом .on():
router.on({
'/': () => { console.log('Главная страница'); },
'/about': () => { console.log('Страница "О нас"'); },
'/user/:id': (params) => { console.log('Пользователь:', params.id); }
});
'/user/:id' — динамический сегмент. Параметр
id автоматически передаётся в обработчик через объект
params.Для более сложных сценариев применяется цепочка методов:
router
.on('/posts', () => { console.log('Все посты'); })
.on('/posts/:id', (params) => { console.log('Пост', params.id); });
Для перехода между маршрутами используется метод
.navigate():
router.navigate('/about');
Для перехода с сохранением состояния можно использовать объект
state:
router.navigate('/user/42', { state: { fromDashboard: true } });
window.history.state.Navigo автоматически интегрируется с History API браузера. Основные режимы работы:
History mode — чистые URL (/about,
/user/42) без хеша.
index.html.Hash mode — URL с хешем
(/#/about).
Выбор режима задаётся через опции при создании роутера:
const router = new Navigo('/', { hash: false });
Для профилирования и отладки навигации используются хуки:
router.hooks({
before: (done, match) => {
console.log('Переход к маршруту:', match.url);
done();
},
after: (match) => {
console.log('Маршрут загружен:', match.url);
}
});
before вызывается перед запуском обработчика
маршрута.after вызывается после выполнения обработчика.done() позволяет асинхронно контролировать
переход.Хуки удобны для профилирования производительности, логирования, аутентификации и условного редиректа.
Для измерения времени загрузки и отклика маршрутов можно использовать встроенные хуки:
router.hooks({
before: (done, match) => {
match.startTime = performance.now();
done();
},
after: (match) => {
const duration = performance.now() - match.startTime;
console.log(`Маршрут ${match.url} загружен за ${duration.toFixed(2)} мс`);
}
});
performance.now() обеспечивает точное измерение времени
с миллисекундной точностью.match содержит URL, параметры и дополнительное
состояние маршрута, что позволяет детально профилировать каждый
переход.Navigo позволяет отслеживать динамические сегменты URL, что полезно для SPA с контентом на основе ID или фильтров:
router.on('/product/:id', (params, query) => {
console.log(`Загрузка продукта ${params.id}`);
});
params.id) и query-параметры доступны
отдельно.Для изменения текущего маршрута без создания истории используется
метод .replace():
router.navigate('/login', { replace: true });
Можно комбинировать маршруты с префиксами для более структурированной навигации:
const adminRouter = router.on('/admin/*', (match) => {
console.log('Админ-панель, путь:', match.url);
});
* обозначает подмаршруты.match.url и хуки
before/after.Использование навигационных хуков для комплексного анализа:
router.hooks({
before: (done, match) => {
match.startTime = performance.now();
console.log('Начало загрузки маршрута:', match.url);
done();
},
after: (match) => {
const duration = performance.now() - match.startTime;
console.log(`Маршрут ${match.url} загружен за ${duration.toFixed(2)} мс`);
// Дополнительно можно отправить данные на сервер аналитики
// sendAnalytics(match.url, duration);
}
});
before, что
позволяет замерять время загрузки данных перед отображением
контента.Navigo предоставляет мощные инструменты для управления навигацией, динамических маршрутов и их профилирования, делая возможным детальный анализ производительности SPA и точное измерение времени отклика каждой части интерфейса.