Navigo — это легковесная библиотека для маршрутизации на стороне клиента в JavaScript, позволяющая управлять навигацией между страницами без перезагрузки браузера. Она строится на концепции Single Page Application (SPA), где различные состояния приложения отображаются через URL, сохраняя динамичность интерфейса.
Создание нового маршрутизатора начинается с инициализации объекта
Navigo:
import Navigo from 'navigo';
const router = new Navigo('/', { hash: true });
Параметры:
'/') задаёт корневой путь
приложения.{ hash: true } включает работу с хеш-URL, что
полезно для простого SPA без серверной поддержки маршрутов.Маршруты в Navigo задаются через метод on, который
связывает путь с функцией-обработчиком:
router.on('/home', () => {
console.log('Главная страница');
});
router.on('/about', () => {
console.log('О странице');
});
Поддержка параметров в URL позволяет создавать динамические маршруты:
router.on('/user/:id', (params) => {
console.log(`Пользователь с ID: ${params.id}`);
});
:id — это плейсхолдер, который будет
автоматически передан в объект params./post/:postId/comment/:commentId.Navigo предоставляет метод navigate, который позволяет
менять URL и вызывать соответствующий обработчик без перезагрузки
страницы:
router.navigate('/about');
Переход может включать замену истории браузера:
router.navigate('/home', { replace: true });
replace: true заменяет текущую запись в истории, не
создавая новую.Метод notFound позволяет определить поведение при вводе
некорректного URL:
router.notFound(() => {
console.log('Страница не найдена');
});
Это особенно важно для SPA, чтобы не перенаправлять пользователя на серверные 404.
Navigo поддерживает регулярные выражения для более гибкой маршрутизации:
router.on({
'/product/:id': (params) => console.log(params.id),
'/category/:name([a-z]+)': (params) => console.log(params.name)
});
([a-z]+) ограничивает допустимые значения
параметра.Navigo позволяет добавлять предобработку маршрутов с
помощью хуков before:
router.on('/dashboard', () => {
console.log('Панель управления');
}).before(() => {
const isLoggedIn = true; // логика авторизации
if (!isLoggedIn) {
router.navigate('/login');
return false; // отменяет текущий маршрут
}
});
before вызывается перед обработчиком маршрута.false отменяет переход.Для SPA удобно использовать ссылки, которые не перезагружают страницу:
<a href="/home" data-navigo>Главная</a>
<a href="/about" data-navigo>О сайте</a>
data-navigo сигнализирует Navigo о том, что
клик по ссылке должен обрабатываться через маршрутизатор.router.updatePageLinks() для активации обработки.Navigo позволяет создавать вложенные маршруты для комплексных SPA:
router.on('/user/:id', {
'/profile': (params) => console.log(`Профиль пользователя ${params.id}`),
'/settings': (params) => console.log(`Настройки пользователя ${params.id}`)
});
Navigo поддерживает два режима работы с URL:
hash: true) — URL вида
/#/page, не требует серверной поддержки.hash: false) — чистый
URL /page, требует настройки сервера для перенаправления
всех маршрутов на index.html.const router = new Navigo('/', { hash: false });
Метод hooks позволяет подписываться на события:
router.hooks({
after: (done, params) => {
console.log('Маршрут загружен', params);
done();
}
});
after вызывается после обработки маршрута.done() необходимо вызвать для продолжения цепочки.Обработчики маршрутов могут быть асинхронными, что удобно для загрузки данных с сервера:
router.on('/posts', async () => {
const response = await fetch('/api/posts');
const posts = await response.json();
console.log(posts);
});
Можно задавать глобальные настройки при инициализации:
const router = new Navigo('/', {
hash: true,
noMatchWarning: false
});
noMatchWarning: false отключает предупреждения при
отсутствии совпадения маршрута.Navigo легко интегрируется с Vanilla JS и простыми библиотеками для рендеринга:
router.on('/home', () => {
document.getElementById('app').innerHTML = '<h1>Главная страница</h1>';
});
Navigo обеспечивает гибкость, легкость и контроль над маршрутизацией, позволяя строить современные SPA без громоздких решений и излишних зависимостей.