В библиотеке Universal Router обработка параметров маршрута играет ключевую роль для создания динамических и гибких приложений. Параметры маршрута позволяют извлекать значения прямо из URL и использовать их в логике приложения. Преобразование параметров обеспечивает контроль над их типами, форматированием и валидацией.
Параметры в маршрутах Universal Router обозначаются через двоеточие
(:). Например:
const routes = [
{
path: '/users/:userId',
action: ({ params }) => {
console.log(params.userId);
}
}
];
Здесь userId автоматически становится свойством объекта
params. Universal Router по умолчанию возвращает все
параметры как строки.
parse для преобразованияДля преобразования параметров в другой тип можно использовать
встроенную поддержку функции parse. Она
позволяет определить способ интерпретации значения параметра при разборе
URL. Пример:
const routes = [
{
path: '/posts/:postId',
parse: {
postId: (value) => parseInt(value, 10)
},
action: ({ params }) => {
console.log(typeof params.postId); // number
}
}
];
В этом примере postId преобразуется из строки в число.
Такой подход особенно полезен для работы с идентификаторами, датами или
логическими значениями.
match и parseПомимо преобразования, Universal Router позволяет реализовать базовую
проверку корректности параметров. Комбинация функции parse
с проверкой внутри action обеспечивает надежную
валидацию:
const routes = [
{
path: '/items/:itemId',
parse: {
itemId: (value) => {
const id = parseInt(value, 10);
if (isNaN(id) || id <= 0) {
throw new Error('Invalid itemId');
}
return id;
}
},
action: ({ params }) => {
console.log(params.itemId);
}
}
];
Здесь некорректные значения itemId приводят к выбросу
ошибки до выполнения основной логики маршрута.
Иногда требуется более сложная логика преобразования, например, для форматов даты или массивов. Universal Router позволяет использовать функции для каждого параметра:
const routes = [
{
path: '/events/:date',
parse: {
date: (value) => {
const parsed = new Date(value);
if (isNaN(parsed.getTime())) {
throw new Error('Invalid date format');
}
return parsed;
}
},
action: ({ params }) => {
console.log(params.date instanceof Date); // true
}
}
];
Такой подход превращает параметр URL в полноценный объект JavaScript, готовый к дальнейшей обработке.
Для маршрутов с несколькими параметрами объект parse
позволяет задать функции для каждого параметра одновременно:
const routes = [
{
path: '/products/:categoryId/:productId',
parse: {
categoryId: Number,
productId: Number
},
action: ({ params }) => {
console.log(params.categoryId, params.productId);
}
}
];
Это сокращает количество кода и делает маршруты более читаемыми.
toPathПомимо преобразования при чтении параметров из URL, Universal Router
поддерживает генерацию URL с параметрами через toPath.
Функция может использоваться вместе с кастомными преобразованиями:
import { compile } from 'path-to-regexp';
const path = compile('/users/:userId');
const url = path({ userId: 42 });
console.log(url); // '/users/42'
При необходимости можно заранее преобразовать данные перед вставкой в URL:
const url = path({ userId: String(42) });
Это обеспечивает согласованность типов между генерацией и разбором маршрутов.
parse для явного контроля типов
параметров.parse для
предотвращения некорректных значений.parse и
toPath, чтобы избежать ошибок при генерации URL.Number, Boolean) или кастомные функции.Такой подход делает маршрутизацию в Universal Router более предсказуемой, безопасной и удобной для масштабирования приложений с динамическими параметрами.