Universal Router предоставляет ряд встроенных утилит и хелперов, которые упрощают обработку маршрутов, управление контекстом и работу с асинхронными компонентами. Они позволяют создавать более компактный и читаемый код, а также реализовывать гибкую маршрутизацию.
resolveRoute
и асинхронная обработкаМетод resolveRoute — это ключевой хелпер для обработки
маршрутов. Он принимает объект маршрута и контекст и возвращает
результат выполнения компонента маршрута. Используется для интеграции с
асинхронными данными, например, загрузки контента с API перед
отображением страницы.
import UniversalRouter from 'universal-router';
const routes = [
{
path: '/users/:id',
async action(context) {
const user = await fetchUser(context.params.id);
return `<h1>${user.name}</h1>`;
}
}
];
const router = new UniversalRouter(routes);
router.resolve({ pathname: '/users/42' }).then(html => {
console.log(html);
});
Особенности:
action.context)Контекст (context) — это объект, который передаётся всем
функциям action маршрутов. Он содержит параметры
маршрута, путь, query-параметры и другие данные, которые могут
понадобиться для обработки маршрута.
{
pathname: '/users/42',
params: { id: '42' },
query: { page: '1' },
route: {...},
baseUrl: ''
}
Полезные возможности контекста:
resolve, позволяя передавать дополнительные данные.context.parent.match и динамические
маршрутыХелпер match позволяет сопоставлять текущий путь с
шаблоном маршрута. Он используется внутри маршрутов для проверки
соответствия сложных динамических путей.
import { match } from 'universal-router';
const route = { path: '/posts/:id' };
const matched = match(route.path, '/posts/123');
console.log(matched); // { id: '123' }
Преимущества использования match:
Universal Router предоставляет встроенные механизмы обработки ошибок
через объект context. Это позволяет создавать
глобальные и локальные обработчики ошибок, минимизируя
дублирование кода.
const router = new UniversalRouter(routes, {
resolveRoute: (context, route) => {
try {
return route.action(context);
} catch (err) {
return `<h1>Error: ${err.message}</h1>`;
}
}
});
Особенности:
Для вложенных маршрутов полезно использовать хелперы, которые автоматически объединяют пути родительских и дочерних маршрутов. Это особенно актуально для SPA-приложений с глубокой иерархией страниц.
const routes = [
{
path: '/dashboard',
children: [
{ path: '/stats', action: () => 'Stats Page' },
{ path: '/settings', action: () => 'Settings Page' }
]
}
];
const router = new UniversalRouter(routes);
Преимущества вложенных хелперов:
/dashboard/stats.context от родителя.Universal Router позволяет комбинировать хелперы для ленивой загрузки модулей или динамических компонентов. Это уменьшает время начальной загрузки приложения и повышает производительность.
{
path: '/lazy',
async action(context) {
const module = await import('./LazyComponent.js');
return module.render(context);
}
}
Особенности такой композиции:
Хелперы Universal Router позволяют:
Использование этих инструментов делает маршрутизацию гибкой, предсказуемой и масштабируемой, минимизируя ручное управление путями и состояниями.