Navigo — это легковесная библиотека для маршрутизации на стороне клиента в JavaScript, позволяющая управлять URL и состоянием приложения без перезагрузки страницы. Ключевой механизм работы Navigo — это определение маршрутов и обработка переходов.
Маршрут в Navigo объявляется с помощью метода on.
Синтаксис следующий:
const router = new Navigo('/');
router.on('/home', () => {
console.log('Главная страница');
});
router.on('/about', () => {
console.log('Страница о проекте');
});
Ключевые моменты:
on — это путь маршрута. Путь
может содержать параметры, например
/user/:id.router.on({
'/home': () => console.log('Главная'),
'/about': () => console.log('О нас'),
});
Параметры позволяют маршрутам быть динамическими. Используются двоеточие и имя параметра:
router.on('/user/:id', (params) => {
console.log('ID пользователя:', params.id);
});
params — объект, автоматически создаваемый Navigo,
содержащий все значения динамических сегментов URL./post/:postId/comment/:commentId.Navigo поддерживает необязательные сегменты и регулярные выражения:
router.on('/archive/:year/:month?', (params) => {
console.log('Год:', params.year, 'Месяц:', params.month);
});
? делает сегмент необязательным. Если URL не
содержит этот сегмент, параметр будет undefined.router.on('/product/:id(\\d+)', (params) => {
console.log('ID продукта (только цифры):', params.id);
});
После объявления маршрутов переходы можно инициировать с помощью
метода navigate:
router.navigate('/home');
router.navigate('/user/42');
router.navigate('/about', { state: { fromMenu: true } });
Для обработки всех маршрутов, включая необработанные, используется
notFound:
router.notFound(() => {
console.log('Страница не найдена');
});
*:router.on('*', () => {
console.log('Любой маршрут');
});
Navigo позволяет назначать несколько функций на один маршрут. Используется массив функций:
router.on('/dashboard', [
() => console.log('Загрузка панели управления'),
() => console.log('Инициализация виджетов'),
]);
Хотя Navigo в первую очередь предназначен для фронтенд-маршрутизации, можно использовать хуки до и после перехода:
router.hooks({
before: (done, params) => {
console.log('Перед переходом', params);
done();
},
after: (params) => {
console.log('После перехода', params);
}
});
before вызывается перед выполнением обработчика
маршрута. Необходимо вызвать done() для продолжения.after вызывается после выполнения обработчика
маршрута.Можно объявлять маршрут с именем, что упрощает навигацию:
router.on('/profile/:id', { as: 'profile', uses: (params) => console.log(params.id) });
router.navigate('profile', { id: 10 });
as задает имя маршрута.uses — функция обработчика./admin, /user,
/public).before и after для централизованной
обработки состояния, авторизации и загрузки данных.Navigo обеспечивает гибкий механизм объявления переходов, который позволяет управлять как статическими, так и динамическими маршрутами, создавать цепочки обработчиков, использовать хуки и имена маршрутов, делая маршрутизацию в SPA управляемой и предсказуемой.