Хук page.start() является ключевой точкой инициализации
маршрутизатора в библиотеке Page.js. Именно с его вызова начинается
обработка маршрутов, перехват ссылок и управление историей браузера. До
вызова page.start() маршруты могут быть объявлены, но ни
один из них не будет активирован.
Функция запускает внутренний механизм прослушивания событий
popstate и кликов по ссылкам, обеспечивая полноценную
работу клиентского роутинга в одностраничных приложениях (SPA).
page.start([options]);
Параметр options — необязательный объект конфигурации,
позволяющий управлять поведением маршрутизатора при запуске.
page('/', index);
page('/about', about);
page.start();
В данном примере:
startПосле вызова page.start() происходит несколько важных
действий:
Инициализация текущего маршрута
Подписка на изменения истории
popstateПерехват кликов по ссылкам
<a> без перезагрузки
страницыПо умолчанию page.start() немедленно вызывает маршрут,
соответствующий текущему адресу:
// URL: /about
page('/about', () => {
console.log('About page');
});
page.start(); // => выполнится обработчик /about
Это позволяет синхронизировать состояние приложения с URL при загрузке страницы.
dispatchpage.start({ dispatch: false });
Отключает автоматический вызов маршрута при старте.
Используется, когда:
Пример:
page.start({ dispatch: false });
// позже
page.show('/home');
clickpage.start({ click: false });
Отключает перехват кликов по ссылкам.
Применяется в ситуациях:
popstatepage.start({ popstate: false });
Отключает обработку событий popstate.
Это означает:
hashbangpage.start({ hashbang: true });
Включает режим hash-based маршрутизации (#!):
example.com/#!/about
Особенности:
Критически важно соблюдать последовательность:
page.start()Неправильный порядок:
page.start();
page('/about', about); // маршрут не будет работать корректно
Правильный порядок:
page('/about', about);
page.start();
page.start()page.start() не предназначен для многократного вызова.
Повторная инициализация может привести к:
Если требуется переинициализация, необходимо:
page.stop()Метод page.stop() останавливает маршрутизатор:
page.stop();
После этого:
Для повторного запуска используется:
page.start();
Однако такой сценарий применяется редко и требует аккуратного управления состоянием.
page.start() активирует использование History API:
pushStatereplaceStatepopstateЭто обеспечивает:
#После запуска:
<a href="/about">About</a>
клик по ссылке:
Исключения:
target="_blank"Иногда требуется инициализация после загрузки данных:
fetch('/config.json')
.then(res => res.json())
.then(config => {
setupRoutes(config);
page.start();
});
Такой подход используется:
page.start() играет роль «точки входа» в клиентскую
навигацию:
В типичном SPA:
page('*', authMiddleware);
page('/', home);
page('/dashboard', dashboard);
page.start();
После вызова start() каждый маршрут выполняет цепочку
middleware:
page('/user/:id',
loadUser,
renderUser
);
При старте:
contextТипичные проблемы:
Маршруты не срабатывают
page.start() не вызванПерезагрузка страницы при клике
clickНекорректный маршрут при старте
page.start() один разhashbang,
popstate)import page from 'page';
page('/', () => {
console.log('Home');
});
page('/about', () => {
console.log('About');
});
page.start();
page('/home', home);
page('/profile', profile);
page.start({
dispatch: true,
click: true,
popstate: true
});
При вызове page.start():
Устанавливается базовый путь
Инициализируется текущий контекст
Добавляются слушатели:
window.onpopstatedocument.onclickВыполняется начальный маршрут (если
dispatch !== false)
При использовании History API необходимо:
index.html для всех
маршрутовПример (Express):
app.get('*', (req, res) => {
res.sendFile('index.html');
});
hashbang)| Режим | URL вид | Требует сервер |
|---|---|---|
| History API | /about |
Да |
| Hashbang | #!/about |
Нет |
Перед вызовом start() можно задать базовый путь:
page.base('/app');
page.start();
Теперь все маршруты будут относиться к /app.
page.start():
Без него Page.js остаётся декларативной конфигурацией без фактической работы.
В отличие от более сложных роутеров:
page.start() — простой, но критически важный триггер,
переводящий библиотеку из состояния «описания маршрутов» в состояние
«активной навигации».