Метод generate является мощным инструментом библиотеки
Universal Router для динамического построения URL на
основе заданных маршрутов. Его основная задача — преобразовать объект с
параметрами в строку маршрута, соответствующую маршруту,
зарегистрированному в конфигурации роутера. Этот метод особенно полезен
при создании ссылок в приложении без необходимости ручного
конструирования URL.
router.generate(name, params, options);
Параметры:
name — имя маршрута (string). Используется
для идентификации маршрута, как это задано в конфигурации.params — объект (object) с параметрами
маршрута. Ключи должны совпадать с именами параметров в пути.options — объект (object) с
дополнительными опциями (необязательный).Возвращаемое значение: Строка — сгенерированный URL на основе имени маршрута и переданных параметров.
import UniversalRouter from 'universal-router';
const routes = [
{ path: '/', name: 'home' },
{ path: '/user/:id', name: 'userProfile' },
{ path: '/search/:query', name: 'search' }
];
const router = new UniversalRouter(routes);
const url = router.generate('userProfile', { id: 42 });
console.log(url); // /user/42
В данном примере метод generate подставляет значение
id в соответствующий параметр маршрута.
Ключевой момент: если параметр, указанный в
params, не существует в маршруте, он будет
проигнорирован.
Маршруты могут содержать необязательные параметры,
которые задаются через ? в конфигурации пути:
const routes = [
{ path: '/post/:id/:commentId?', name: 'post' }
];
const router = new UniversalRouter(routes);
router.generate('post', { id: 10 });
// /post/10
router.generate('post', { id: 10, commentId: 5 });
// /post/10/5
Если необязательный параметр отсутствует в объекте
params, метод generate корректно формирует URL
без него.
Для генерации URL с query-параметрами generate
поддерживает объект options.query:
const routes = [
{ path: '/search/:query', name: 'search' }
];
const router = new UniversalRouter(routes);
const url = router.generate('search', { query: 'javascript' }, {
query: { page: 2, sort: 'asc' }
});
console.log(url); // /search/javascript?page=2&sort=asc
Особенности:
encodeURIComponent).Universal Router позволяет использовать вложенные
маршруты, что важно для крупных приложений. Метод
generate корректно формирует URL с учётом вложенной
структуры:
const routes = [
{
path: '/user/:id',
name: 'user',
children: [
{ path: 'profile', name: 'profile' },
{ path: 'settings', name: 'settings' }
]
}
];
const router = new UniversalRouter(routes);
router.generate('profile', { id: 7 });
// /user/7/profile
router.generate('settings', { id: 7 });
// /user/7/settings
Важное правило: имя маршрута должно быть уникальным
в рамках всего дерева маршрутов, иначе generate выберет
первый найденный маршрут.
generateПараметр options позволяет гибко управлять генерацией
URL:
query — объект с query-параметрами.strict — boolean, включает строгую проверку
соответствия переданных параметров маршруту. Если включено, отсутствие
обязательного параметра вызовет ошибку.base — базовый путь, который будет добавлен перед
сгенерированным URL.const url = router.generate('userProfile', { id: 5 }, { base: '/app', query: { ref: 'newsletter' } });
// /app/user/5?ref=newsletter
Метод generate может выбросить ошибки в следующих
случаях:
strict).Обработка ошибок выполняется стандартными конструкциями
try...catch:
try {
router.generate('nonExisting', {});
} catch (err) {
console.error(err.message); // Route "nonExisting" not found
}
Метод generate позволяет:
Использование generate делает код более поддерживаемым,
исключает ручное составление URL и интегрируется с системой маршрутов
Universal Router для максимальной гибкости при навигации.