В библиотеке Universal Router маршруты представляются в виде массива объектов, каждый из которых описывает путь, условия сопоставления и действия, выполняемые при совпадении. Для визуализации дерева маршрутов важно понимать иерархию вложенности и связи между родительскими и дочерними маршрутами.
Каждый маршрут может содержать следующие ключевые свойства:
path — строка с шаблоном пути. Поддерживаются
динамические сегменты через :param, опциональные сегменты
(segment)? и регулярные выражения.action — функция, вызываемая при совпадении маршрута.
Обычно возвращает компонент, HTML или данные.children — массив вложенных маршрутов. Позволяет
строить сложные иерархии и реализовывать вложенные маршруты.name — удобный идентификатор маршрута для ссылок и
навигации.resolve — альтернативное название функции действия,
используемое для асинхронного сопоставления.Пример структуры маршрута:
const routes = [
{
path: '/',
action: () => 'Главная страница',
children: [
{
path: 'about',
action: () => 'О нас'
},
{
path: 'products',
children: [
{ path: ':id', action: ({ params }) => `Продукт ${params.id}` }
]
}
]
}
];
Для анализа и отладки маршрутов полезно строить дерево маршрутов в
виде иерархического графа, где каждый уровень
соответствует вложенности children. Такой подход помогает
сразу определить:
Пример текстовой визуализации:
/
├─ about
├─ products
│ └─ :id
Каждый узел дерева отображает путь, а вложенность отражает дочерние маршруты. Это позволяет выявить потенциальные конфликты и перекрытия маршрутов.
function visualizeRoutes(routes, prefix = '') {
routes.forEach(route => {
const path = prefix + (route.path || '');
console.log(path);
if (route.children) {
visualizeRoutes(route.children, path + '/');
}
});
}
visualizeRoutes(routes);
Пример Mermaid-синтаксиса:
graph TD
A[/] --> B[about]
A --> C[products]
C --> D[:id]
action,
name и resolve. Это облегчает диагностику и
позволяет видеть, какой обработчик отвечает за конкретный маршрут.:id, :slug) для понимания структуры
параметров.resolve или action, возвращающими промисы,
желательно помечать отдельным значком, чтобы сразу видеть потенциальные
точки загрузки данных./
├─ home
├─ about
├─ blog
│ ├─ :year
│ │ └─ :month
│ │ └─ :slug
├─ products
│ ├─ list
│ └─ :id
└─ admin
├─ dashboard
└─ settings
Здесь сразу видно:
:year,
:month, :slug, :id);dashboard,
settings);Такой подход к визуализации дерева маршрутов в Universal Router сочетает в себе точность описания путей, ясность и удобство диагностики сложных иерархий маршрутов.