В SkateJS маршрутизация строится на основе работы с URL и сопоставления его частей с компонентами приложения. Параметры маршрутов позволяют динамически извлекать данные из адресной строки и использовать их для управления состоянием компонентов.
Параметры маршрутов в SkateJS задаются через двоеточие
(:) перед именем переменной в строке пути. Пример базового
маршрута с параметром:
import { Router } from '@skatejs/router';
const router = new Router();
router.route('/user/:id', ({ params }) => {
console.log(params.id); // Доступ к значению параметра
});
В этом примере любой URL вида /user/123 будет
сопоставлен с маршрутом, а params.id примет значение
"123".
Особенности синтаксиса:
/), могут быть
любыми строками без разделителей./user/:id/post/:postId.undefined.Параметры можно сделать необязательными, добавив знак вопроса
? после имени параметра:
router.route('/search/:query?', ({ params }) => {
console.log(params.query); // Может быть undefined
});
Такой маршрут будет работать как для /search, так и для
/search/keyword.
SkateJS не предоставляет встроенного синтаксиса для дефолтных значений параметров. Для этого используется проверка в обработчике маршрута:
router.route('/profile/:tab?', ({ params }) => {
const tab = params.tab || 'overview';
console.log(tab); // Если tab не указан, используется 'overview'
});
Для маршрутов с несколькими параметрами удобно использовать деструктуризацию:
router.route('/shop/:category/:productId', ({ params }) => {
const { category, productId } = params;
console.log(category, productId);
});
Это упрощает передачу данных в компоненты и обработку логики.
Для валидации параметров SkateJS рекомендует использовать регулярные выражения. Синтаксис позволяет указать шаблон для параметра:
router.route('/order/:orderId(\\d+)', ({ params }) => {
console.log(params.orderId); // Только числовые значения
});
Если URL не соответствует шаблону, маршрут не сработает. Это позволяет ограничить типы данных и исключить некорректные адреса.
Отдельно от параметров маршрута в SkateJS можно работать с
query-параметрами через объект location.search:
router.route('/products/:id', ({ params, location }) => {
const urlParams = new URLSearchParams(location.search);
const ref = urlParams.get('ref');
console.log(params.id, ref);
});
Таким образом, URL /products/42?ref=homepage даст
params.id = "42" и ref = "homepage".
SkateJS позволяет динамически обновлять параметры без перезагрузки
страницы с помощью метода navigate:
router.navigate('/user/456');
Это изменяет текущий маршрут, обновляет параметры и вызывает соответствующий обработчик. При необходимости можно объединять это с состоянием компонентов, чтобы реактивно менять отображение:
class UserProfile extends HTMLElement {
connectedCallback() {
this.routerSubscription = router.onRoute(({ params }) => {
this.renderUser(params.id);
});
}
disconnectedCallback() {
this.routerSubscription();
}
renderUser(id) {
this.innerHTML = `<p>Пользователь: ${id}</p>`;
}
}
customElements.define('user-profile', UserProfile);
/). Для
вложенных структур следует использовать несколько сегментов пути./user/:id/details/:subId? без явного объявления каждого
сегмента.navigate автоматически
вызывает обработчик маршрута, что исключает необходимость ручного
обновления состояния.params напрямую, без деструктуризации,
чтобы легко передавать все данные в дочерние компоненты.Параметры маршрутов в SkateJS обеспечивают гибкую и простую работу с динамическими URL, позволяя создавать сложные интерфейсы с минимальной логикой маршрутизации.