Метод page.stop() в библиотеке Page.js предназначен для
полной остановки клиентского роутера. После его вызова прекращается
обработка маршрутов, отключаются обработчики событий браузера, и система
маршрутизации перестаёт реагировать на изменения URL.
Этот метод используется в ситуациях, когда необходимо временно или окончательно деактивировать механизм маршрутизации без перезагрузки страницы.
При инициализации Page.js выполняет несколько ключевых действий:
popstateclick events)history.pushStateВызов page.stop():
popstateФактически, роутер переходит в «пассивное» состояние.
page.stop();
Метод не принимает аргументов и не возвращает значение.
В одностраничных приложениях может возникать необходимость отключения маршрутизации, например:
page.stop();
После этого Page.js перестаёт влиять на навигацию.
При длительной работе SPA приложение может накапливать обработчики событий. Если роутер больше не нужен:
page.stop();
Это позволяет избежать:
page.start()Методы page.start() и page.stop() работают
в паре.
page.start();
// роутер активен
page.stop();
// роутер отключён
page.start();
// повторная активация
Важно: маршруты, объявленные до stop(), сохраняются и
будут работать после повторного start().
После вызова page.stop():
page('/path') не выполняются
автоматическиПример:
page('/about', () => {
console.log('About page');
});
page.start();
page.stop();
page('/about'); // обработчик не выполнится
Page.js активно использует History API:
pushStatereplaceStatepopstateПосле page.stop():
Однако сам History API продолжает работать независимо от Page.js.
Одной из ключевых возможностей Page.js является перехват кликов:
<a href="/about">About</a>
В активном состоянии:
После page.stop():
page.stop() не имеет механизма автозапуска. После
остановки требуется явный вызов:
page.start();
start()page.stop();
page('/home'); // не сработает
Маршруты выполняются только при активном роутере.
Если вызвать page.start() несколько раз без
stop():
Правильный паттерн:
page.stop();
page.start();
В крупных приложениях маршрутизация может быть разбита на модули. В
таком случае page.stop() применяется для управления
жизненным циклом модулей.
Пример:
export function initModule() {
page('/module', handler);
page.start();
}
export function destroyModule() {
page.stop();
}
При использовании нескольких роутеров (например, миграция с одной библиотеки на другую):
page.stop();
// инициализация другого роутера
Это предотвращает:
При проблемах с маршрутизацией важно учитывать состояние роутера:
page.start())page.stop())Признаки остановленного роутера:
popstate не вызывает обработчики// маршруты
page('/', () => console.log('Home'));
page('/about', () => console.log('About'));
// запуск
page.start();
// остановка через 5 секунд
setTimeout(() => {
page.stop();
console.log('Router stopped');
}, 5000);
После остановки:
В отличие от некоторых роутеров:
Это делает page.stop() лёгким инструментом управления
жизненным циклом.
page.stop() только при необходимостиpage.start() — запуск маршрутизацииpage() — объявление маршрутовpage.redirect() — программный редиректpage.stop() является частью базового управления
состоянием роутера и критически важен для контроля поведения
SPA-приложений.