В библиотеке Universal Router ключевым элементом
маршрутизации является объект маршрута. Один из наиболее важных
параметров этого объекта — action. Он определяет, как
система будет обрабатывать совпадение маршрута с текущим URL и какие
данные или компоненты будут возвращены.
actionПараметр action задаётся как функция, которая
выполняется при совпадении маршрута с текущим путём. Он получает объект
контекста, содержащий информацию о текущем URL, параметрах и других
маршрутах. В результате выполнения функции action можно
вернуть:
const routes = [
{
path: '/home',
action: () => 'Главная страница'
},
{
path: '/about',
action: () => ({ title: 'О нас', content: 'Информация о компании' })
}
];
В примере выше для пути /home возвращается простая
строка, а для /about — объект с данными. Universal Router
автоматически обрабатывает результат action и передаёт его
вызывающему коду.
actionФункция action принимает один аргумент —
context, который содержит:
pathname — текущий URL, с которым произошло
совпадениеparams — объект параметров маршрута, извлечённых из
динамических сегментов URLquery — объект параметров запроса (если используется
дополнительный парсер)route — объект текущего маршрутаrouter — ссылка на сам экземпляр Universal Router, что
позволяет выполнять вложенные переходыconst routes = [
{
path: '/user/:id',
action: ({ params }) => `Пользователь с ID: ${params.id}`
}
];
При переходе на /user/42 функция action
вернёт строку Пользователь с ID: 42. Использование
params позволяет динамически строить контент в зависимости
от URL.
action может быть асинхронной функцией. Это особенно
важно для загрузки данных с сервера или динамического импорта модулей.
Universal Router корректно обрабатывает промисы, что позволяет строить
SPA с ленивой загрузкой компонентов.
const routes = [
{
path: '/posts/:id',
action: async ({ params }) => {
const response = await fetch(`/api/posts/${params.id}`);
const post = await response.json();
return post;
}
}
];
В этом примере при переходе на /posts/10 произойдёт
асинхронная загрузка данных о посте с ID 10. Результат запроса
автоматически возвращается вызывающему коду.
actionПараметр action играет ключевую роль при работе с
вложенными маршрутами. Для каждого уровня маршрута можно определить своё
action. Вложенные маршруты вызываются последовательно, и их
результаты можно комбинировать или изменять.
const routes = [
{
path: '/dashboard',
action: () => 'Главная панель',
children: [
{
path: '/stats',
action: () => 'Статистика панели'
}
]
}
];
Переход на /dashboard/stats сначала вызовет
action родительского маршрута
(Главная панель), а затем дочернего
(Статистика панели). Это позволяет строить иерархические
интерфейсы с общими обертками и частями страниц.
Если ни один маршрут не совпадает, Universal Router предоставляет
возможность задать action по умолчанию через глобальный
маршрут '*' или обработать ошибку внутри
action. Это делает обработку 404 и других ошибок
гибкой.
const routes = [
{
path: '*',
action: () => 'Страница не найдена'
}
];
action лучше использовать для подготовки данных, а
рендеринг выполнять отдельно.action, что упрощает построение сложных
интерфейсов.Параметр action является ядром работы Universal Router,
объединяя обработку маршрута, получение данных и подготовку результата
для рендеринга. Его правильное использование позволяет строить как
простые страницы, так и сложные SPA с асинхронными загрузками и
вложенной структурой маршрутов.