Navigo — это лёгкая и современная библиотека маршрутизации для JavaScript, предназначенная для работы с одностраничными приложениями (SPA). Она обеспечивает управление URL-путями, навигацию и обработку состояния приложения без перезагрузки страницы. В основе работы лежит принцип отслеживания изменений адресной строки браузера и вызова соответствующих обработчиков маршрутов.
Navigo поддерживает как hash-based routing
(# в URL), так и history API routing, что
позволяет создавать чистые URL без хэшей. Библиотека отличается
минимальным размером, простотой интеграции и гибкостью настройки.
Создание нового экземпляра Navigo производится через конструктор:
import Navigo from 'navigo';
const router = new Navigo('/', {
hash: false,
linksSelector: "a"
});
Параметры конструктора:
root — корневой путь приложения (по умолчанию
/).hash — определяет тип маршрутизации: true
для hash-based маршрутов, false для history API.linksSelector — CSS-селектор ссылок, которые будут
автоматически перехватываться для навигации.Маршруты задаются с помощью метода .on():
router.on({
'/': () => {
console.log('Главная страница');
},
'/about': () => {
console.log('Страница о проекте');
},
'/user/:id': (params) => {
console.log(`Пользователь с ID: ${params.id}`);
}
});
Особенности маршрутов:
:, например
:id..on() и .on('*') позволяют задавать
как конкретные, так и универсальные маршруты.Navigo позволяет изменять путь приложения без перезагрузки страницы:
router.navigate('/about');
Метод navigate() изменяет URL и вызывает соответствующий
обработчик маршрута. Это особенно полезно для динамических переходов
внутри SPA.
Navigo автоматически передаёт параметры маршрута в функцию-обработчик:
router.on('/product/:category/:id', (params, query) => {
console.log(params.category); // "books"
console.log(params.id); // "123"
console.log(query); // объект query string, например { ref: 'newsletter' }
});
Для извлечения query параметров используется объект
query, который автоматически парсит строку после
?.
Navigo поддерживает динамические редиректы и проверку доступа:
router.on('/dashboard', () => {
if (!userIsLoggedIn()) {
router.navigate('/login');
return;
}
renderDashboard();
});
Можно задавать условные маршруты, используя callback-функции, проверяющие права пользователя или состояние приложения перед рендерингом страницы.
Navigo позволяет создавать вложенные маршруты и группировать их по логике:
router.on('/admin', () => console.log('Админ панель'))
.on('/admin/users', () => console.log('Список пользователей'))
.on('/admin/settings', () => console.log('Настройки'));
Для более сложной структуры можно использовать
подмаршруты через .on() с объектом:
router.on({
'/admin': {
'/users': () => console.log('Пользователи'),
'/settings': () => console.log('Настройки')
}
});
Метод .notFound() позволяет задать обработчик для URL,
которые не соответствуют ни одному маршруту:
router.notFound(() => {
console.log('Страница не найдена');
});
Это эквивалент 404-страницы в традиционных приложениях.
Navigo поддерживает хуки для выполнения действий до или после перехода по маршруту:
before — вызывается перед маршрутом. Можно отменить
переход.after — вызывается после маршрута.router.hooks({
before: (done, params) => {
console.log('Перед переходом', params);
done();
},
after: (params) => {
console.log('После перехода', params);
}
});
Для интеграции с HTML-ссылками можно использовать метод
link() для автоматической генерации корректного URL:
const link = router.link('/user/42'); // "/user/42"
Это удобно для SPA, где ссылки могут меняться динамически и требуют синхронизации с маршрутизатором.
navigate() и перехват ссылок.notFound() для
404.Навигация в SPA с Navigo строится на простом и понятном API, позволяющем полностью контролировать URL и соответствующие действия, обеспечивая плавный переход между состояниями приложения без перезагрузки страницы.