В маршрутизации веб-приложений часто возникает ситуация, когда часть пути повторяется в нескольких маршрутах. Библиотека Universal Router предоставляет гибкие средства для работы с повторяющимися сегментами URL, что позволяет создавать лаконичные и масштабируемые маршруты без дублирования кода.
В Universal Router маршруты могут содержать параметры сегментов, которые повторяются несколько раз в пути. Например, путь вида:
/users/:userId/posts/:postId/comments/:commentId
Содержит три параметра :userId, :postId и
:commentId. При необходимости обработать множественные
повторяющиеся сегменты можно использовать регулярные выражения в
параметрах:
const routes = [
{
path: '/files/:path(.*)',
action: ({ params }) => {
return `Путь к файлу: ${params.path}`;
}
}
];
Здесь :path(.*) позволяет захватывать все повторяющиеся
сегменты после /files/. Такой подход особенно полезен для
вложенных директорий или динамических маршрутов с неизвестной
глубиной.
Когда несколько маршрутов начинаются с одинакового префикса, Universal Router позволяет использовать вложенные маршруты для повторяющегося сегмента:
const routes = [
{
path: '/users/:userId',
children: [
{
path: 'posts',
action: ({ params }) => `Список постов пользователя ${params.userId}`
},
{
path: 'settings',
action: ({ params }) => `Настройки пользователя ${params.userId}`
}
]
}
];
Здесь сегмент /users/:userId повторно используется для
всех вложенных маршрутов. Такая структура улучшает читаемость кода и
упрощает поддержку.
Для сложных приложений часто требуется маршрутизация с переменной
глубиной. Universal Router позволяет строить динамические цепочки
вложенных маршрутов через функцию children, которая может
возвращать массив маршрутов на основе текущих параметров:
const routes = [
{
path: '/categories/:categoryId',
children: ({ params }) => [
{
path: 'products/:productId',
action: () => `Продукт ${params.productId} в категории ${params.categoryId}`
}
]
}
];
Такой подход делает возможным повторное использование
сегмента :categoryId для всех маршрутов внутри
категории без дублирования.
Universal Router поддерживает именованные параметры с повторяющимися сегментами, что особенно удобно для REST API:
const routes = [
{
path: '/api/:version/users/:userId',
action: ({ params }) => `API версия: ${params.version}, пользователь: ${params.userId}`
}
];
Использование именованных параметров позволяет чётко разделять роли сегментов и обрабатывать их независимо, даже если структура маршрута повторяется в разных частях приложения.
Для случаев, когда маршруты могут повторяться на нескольких уровнях, применяют рекурсивные структуры:
const routes = [
{
path: '/category/:id',
children: [
{
path: '/category/:id',
children: ({ params }) => [
{ path: 'details', action: () => `Детали категории ${params.id}` }
]
}
]
}
];
Рекурсивные маршруты позволяют динамически формировать структуру, где один и тот же сегмент может повторяться несколько раз на разных уровнях иерархии.
Повторяющиеся сегменты в Universal Router позволяют строить чистую и управляемую маршрутизацию, минимизируя дублирование кода и обеспечивая удобную работу с параметрами, вложенностью и динамическими путями.