Библиотека Page.js предоставляет удобный способ управления маршрутизацией на стороне клиента в одностраничных приложениях (SPA). Одной из ключевых возможностей является отслеживание изменений URL и соответствующая обработка переходов без перезагрузки страницы.
Маршруты в Page.js задаются с помощью функции
page(path, callback). path — это путь URL,
который должен обрабатываться, а callback — функция,
вызываемая при совпадении маршрута. Пример базового определения
маршрута:
page('/home', () => {
console.log('Пользователь перешел на /home');
});
При вызове page() без аргументов библиотека запускает
обработку текущего URL:
page();
Это позволяет сразу определить текущую страницу при загрузке приложения.
Page.js использует HTML5 History API, что позволяет отслеживать изменения URL без перезагрузки страницы. Ключевой метод для этого — регистрация маршрутов с колбэками. Любое изменение URL, вызванное пользователем или программно, будет автоматически проверяться библиотекой, если маршруты определены корректно.
page('/about', () => {
console.log('URL изменен на /about');
});
page('/contact', () => {
console.log('URL изменен на /contact');
});
page();
Для программного изменения URL используется функция
page.show(path). Этот метод изменяет адресную строку и
вызывает соответствующий маршрут:
page.show('/about'); // Выведет 'URL изменен на /about'
page.show может принимать второй аргумент — объект
опций. Основные опции:
replace: true — заменяет текущую запись в истории
браузера, не создавая новую.dispatch: false — изменяет URL без вызова обработчиков
маршрутов.state: {...} — добавляет объект состояния в запись
истории.Пример использования:
page.show('/contact', { replace: true, state: { from: 'home' } });
Для глобальной проверки всех изменений URL можно использовать middleware:
page((ctx, next) => {
console.log(`Изменился URL на ${ctx.path}`);
next();
});
Middleware срабатывает перед любым маршрутом и получает объект
ctx (контекст маршрута). Полезные свойства
ctx:
ctx.path — путь без хоста и параметров.ctx.querystring — строка запроса (например,
?id=123).ctx.params — параметры маршрута (например, для
/user/:id будет доступно ctx.params.id).Page.js поддерживает динамические сегменты URL. Например:
page('/user/:id', (ctx) => {
console.log(`Пользователь с ID: ${ctx.params.id}`);
});
Любое изменение URL, соответствующее шаблону /user/:id,
автоматически будет перехвачено и обработано. Это удобно для SPA с
динамическим контентом.
Page.js можно использовать совместно с событиями
popstate для расширенного контроля:
window.addEventListener('popstate', (event) => {
console.log('История изменена, текущее состояние:', event.state);
});
Однако чаще всего этого не требуется, так как сама библиотека Page.js
перехватывает все действия history.pushState и
history.replaceState.
page.show с опцией
dispatch: false удобно для программного изменения
URL без вызова обработчиков.page() после всех
маршрутов обязательна для корректной проверки текущего URL при
загрузке страницы.page((ctx, next) => {
console.log(`Новый путь: ${ctx.path}, строка запроса: ${ctx.querystring}`);
next();
});
page('/dashboard', () => {
console.log('Перешли на дашборд');
});
page('/dashboard/:section', (ctx) => {
console.log(`Открыта секция: ${ctx.params.section}`);
});
page();
В этом примере любое изменение URL будет перехвачено middleware, а маршруты с динамическими сегментами позволяют проверять точное содержание URL.