Riot.js предоставляет лёгкую и эффективную систему маршрутизации,
которая позволяет управлять навигацией внутри приложения без полной
перезагрузки страницы. Основным инструментом для этого является объект
Riot.router, который отвечает за сопоставление URL с
компонентами и обработку параметров маршрутов.
Маршруты в Riot.js определяются с использованием метода
Riot.router.add. Каждый маршрут представляет собой строку
пути, которая может включать статические сегменты и динамические
параметры:
Riot.router.add('/home', () => {
console.log('Главная страница');
});
Riot.router.add('/user/:id', (params) => {
console.log('Пользователь с ID:', params.id);
});
/home, /about).:id) и передаются в функцию-обработчик через
объект params.Riot.js поддерживает маршруты с несколькими динамическими параметрами. Это позволяет строить гибкие URL-структуры для различных страниц приложения:
Riot.router.add('/product/:category/:id', (params) => {
console.log(`Категория: ${params.category}, ID товара: ${params.id}`);
});
Параметры автоматически извлекаются из URL и могут быть использованы для загрузки данных или изменения состояния компонентов.
Необязательные параметры обозначаются с помощью знака вопроса
?. Это позволяет создавать маршруты с гибкой структурой,
где некоторые сегменты могут отсутствовать:
Riot.router.add('/search/:query?', (params) => {
if (params.query) {
console.log('Поиск по запросу:', params.query);
} else {
console.log('Главная страница поиска');
}
});
При отсутствии параметра объект params будет пустым или
содержать undefined.
Переход между маршрутами осуществляется методом
Riot.router.navigate. Этот метод обновляет URL и вызывает
соответствующий обработчик:
Riot.router.navigate('/home');
Riot.router.navigate('/user/42');
Важной особенностью является возможность работы с историей браузера
без перезагрузки страницы. Riot.js автоматически использует
pushState для изменения адресной строки и управления
историей.
Для удобства управления сложными приложениями можно использовать вложенные маршруты или группировать их по префиксу. Riot.js позволяет создавать промежуточные функции-обработчики, которые вызываются перед основным маршрутом:
Riot.router.add('/admin/*', (params, next) => {
console.log('Проверка прав администратора');
next(); // передать управление следующему маршруту
});
Riot.router.add('/admin/dashboard', () => {
console.log('Панель администратора');
});
Звёздочка * используется для перехвата всех вложенных
маршрутов. Это особенно полезно для реализации защиты страниц и
выполнения общих операций перед переходом на конкретный маршрут.
Для удобства работы с динамическими маршрутами можно строить URL программно, используя параметры. Riot.js позволяет создавать функции, которые формируют корректные пути:
function userUrl(id) {
return `/user/${id}`;
}
Riot.router.navigate(userUrl(123));
Это упрощает работу с навигацией и исключает ошибки при ручной подстановке параметров.
Riot.js тесно интегрирован с реактивной системой фреймворка. Изменение маршрута автоматически обновляет связанные компоненты, если их состояние зависит от параметров URL:
Riot.router.add('/profile/:id', (params) => {
riot.update({ userId: params.id });
});
Компоненты, подписанные на userId, будут автоматически
перерендерены при переходе на новый профиль.
Riot.router.start() — запускает
маршрутизатор и отслеживает изменения URL.Riot.router.stop() — останавливает
отслеживание изменений URL.Riot.router.on('route', callback) —
подписка на все изменения маршрутов.Эти методы позволяют гибко управлять поведением приложения и интегрировать маршрутизацию с другими частями фреймворка.
Параметры маршрутов в Riot.js являются ключевым механизмом для создания динамических интерфейсов. Они позволяют:
Эффективное использование этих инструментов делает приложение более модульным и легко расширяемым, упрощая поддержку сложных пользовательских сценариев.