Именованные роуты в библиотеке Navigo позволяют привязывать к маршрутам уникальные идентификаторы. Это упрощает навигацию по приложению, особенно когда нужно ссылаться на маршруты динамически, генерировать ссылки или изменять маршруты без жесткой привязки к строковому URL.
Создание именованного роута осуществляется через передачу объекта с
параметрами name и handler при определении
маршрута:
const router = new Navigo('/');
router.on({
name: 'home',
path: '/',
handler: () => {
console.log('Главная страница');
}
});
router.on({
name: 'profile',
path: '/user/:id',
handler: ({ data }) => {
console.log(`Профиль пользователя с ID: ${data.id}`);
}
});
Здесь ключевое — свойство name. Оно выступает в роли
уникального идентификатора маршрута, который можно использовать для
генерации URL или для программной навигации.
Navigo позволяет создавать ссылки на маршруты по их имени, что особенно удобно для SPA, где URL может содержать динамические параметры.
const profileUrl = router.generate('profile', { id: 42 });
console.log(profileUrl); // /user/42
name.:id в примере).Использование именованных роутов для генерации ссылок обеспечивает консистентность URL и уменьшает риск ошибок при ручном указании пути.
Для перехода на определенный маршрут можно использовать метод
navigate с указанием имени:
router.navigate('home');
router.navigate('profile', { id: 7 });
Это заменяет необходимость прямого указания строкового пути:
// Вместо router.navigate('/user/7');
Таким образом, изменения структуры URL в будущем не требуют
исправления всех вызовов navigate, достаточно обновить путь
в определении роута.
Маршруты могут содержать динамические сегменты, которые затем передаются через объект параметров:
router.on({
name: 'article',
path: '/articles/:category/:id',
handler: ({ data }) => {
console.log(`Категория: ${data.category}, Статья: ${data.id}`);
}
});
const articleUrl = router.generate('article', { category: 'tech', id: 101 });
console.log(articleUrl); // /articles/tech/101
Динамические параметры обеспечивают гибкость при создании маршрутов, которые зависят от данных пользователя или контента.
Если требуется изменить путь существующего именованного роута,
достаточно вызвать on с тем же именем, указав новый
путь:
router.on({
name: 'profile',
path: '/member/:id',
handler: ({ data }) => {
console.log(`Профиль члена с ID: ${data.id}`);
}
});
console.log(router.generate('profile', { id: 42 })); // /member/42
Именованные роуты также можно использовать для делегирования событий или условной навигации в приложении:
function redirectToProfile(userId) {
const url = router.generate('profile', { id: userId });
router.navigate(url);
}
Navigo поддерживает хуки и fallback маршруты, которые можно сочетать с именованными роутами для более сложной логики:
router.on({
name: 'dashboard',
path: '/dashboard',
handler: () => console.log('Дашборд'),
before: (done, params) => {
if (!user.isLoggedIn) {
router.navigate('login');
} else {
done();
}
}
});
router.notFound(() => {
router.navigate('home');
});
Это позволяет управлять доступом к маршрутам через логику приложения, сохраняя при этом удобство использования именованных идентификаторов.
Использование именованных роутов в Navigo позволяет строить структурированные и легко поддерживаемые маршруты, обеспечивая чистую и понятную навигацию по приложению. Они являются мощным инструментом для создания динамических SPA с минимальной привязкой к конкретным URL.