В Universal Router хеш-параметры используются для
обработки маршрутов, где часть URL после символа #
(hash) содержит информацию о состоянии приложения. Такие
маршруты обычно применяются в одностраничных приложениях (SPA), где
необходимо изменять состояние интерфейса без перезагрузки страницы.
Хеш доступен через объект location.hash. Однако в
контексте маршрутизации Universal Router рекомендуется
использовать маршруты с динамическими сегментами, чтобы напрямую
сопоставлять части хеша с параметрами:
import UniversalRouter from 'universal-router';
const routes = [
{
path: '/#section/:id',
action: ({ params }) => {
console.log(params.id); // получаем значение параметра id из хеша
return `Раздел ${params.id}`;
}
}
];
const router = new UniversalRouter(routes);
router.resolve({ pathname: '/#section/42' }).then(console.log);
// Вывод: Раздел 42
Важно помнить, что браузеры по умолчанию передают хеш как часть
window.location.hash, и при использовании
Universal Router стоит учитывать, что маршруты должны
соответствовать формату, который вы передаете в resolve()
или при инициализации маршрутизатора.
Для более сложных хеш-параметров можно использовать регулярные выражения в пути маршрута:
const routes = [
{
path: '/#tab/:name([a-z]+)',
action: ({ params }) => `Активная вкладка: ${params.name}`
}
];
router.resolve({ pathname: '/#tab/settings' }).then(console.log);
// Вывод: Активная вкладка: settings
Регулярные выражения позволяют ограничивать допустимые значения параметров, что особенно полезно при работе с хешами, содержащими различные состояния приложения.
Universal Router поддерживает вложенные маршруты, что
позволяет комбинировать обычные пути и хеши для сложных SPA:
const routes = [
{
path: '/',
children: [
{
path: '#section/:id',
action: ({ params }) => `Раздел: ${params.id}`
},
{
path: '#modal/:modalId',
action: ({ params }) => `Открыт модальный: ${params.modalId}`
}
]
}
];
router.resolve({ pathname: '/#modal/login' }).then(console.log);
// Вывод: Открыт модальный: login
Использование вложенных маршрутов помогает отделять основные пути от дополнительных состояний интерфейса, передаваемых через хеш.
Для реактивного обновления интерфейса при изменении хеша можно
подписываться на событие hashchange и перенаправлять на
соответствующий маршрут:
window.addEventListener('hashchange', () => {
router.resolve({ pathname: window.location.hash }).then((result) => {
document.getElementById('app').innerText = result;
});
});
Такой подход обеспечивает синхронизацию состояния приложения с адресной строкой без перезагрузки страницы.
# в пути при работе с hash-based
маршрутизацией.params.hashchange — используется для
реактивного изменения содержимого без перезагрузки страницы.Хеш-параметры обеспечивают простую и надежную маршрутизацию для SPA,
где необходимо управление состоянием приложения напрямую из адресной
строки. Их правильное использование с Universal Router
позволяет строить гибкие и динамичные интерфейсы, сохраняющие
предсказуемое поведение при навигации.