Метод page.show() в библиотеке Page.js
используется для программного перехода на определённый маршрут без
необходимости взаимодействия с элементами DOM, такими как ссылки. Этот
метод позволяет инициировать навигацию программно, передав URL или путь
маршрута, зарегистрированный ранее через
page(path, callback).
page('/about', () => {
console.log('Переход на страницу "О нас"');
});
page.show('/about'); // Программный переход на /about
При вызове page.show() выполняются все middleware и
callback-функции, зарегистрированные для данного маршрута. Метод
принимает следующие параметры:
path (обязательный) — строка,
указывающая путь, на который нужно перейти.state (необязательный) — объект
состояния, который будет добавлен в историю браузера.dispatch (необязательный, по умолчанию
true) — логическое значение, определяющее, должен ли
Page.js вызывать обработчики маршрута.replace (необязательный, по умолчанию
false) — определяет, будет ли текущая запись истории
заменена или создана новая.Пример с использованием всех параметров:
page.show('/contact', { from: 'home' }, true, true);
В этом примере:
/contact.state добавляется свойство
from: 'home'.dispatch: true означает, что будут вызваны все
middleware и маршруты.replace: true заменяет текущую запись в истории, не
создавая новую.page.show() от
page()Метод page() обычно используется для регистрации
маршрутов или инициирования маршрута вручную. В отличие от него,
page.show() специально предназначен для программной
навигации, сохраняя контроль над историей браузера и
возможностью отключить вызов middleware через параметр
dispatch.
page('/profile', () => {
console.log('Страница профиля');
});
page.show('/profile', null, false); // Переход без вызова обработчиков
Здесь переход происходит, но callback-функции маршрута не вызываются, что полезно при изменении URL без рендеринга нового контента.
Передача состояния через метод page.show() позволяет
сохранять дополнительные данные в истории браузера, аналогично
history.pushState. Эти данные можно получить через
ctx.state в middleware:
page('/dashboard', ctx => {
console.log(ctx.state.user); // Выведет 'admin'
});
page.show('/dashboard', { user: 'admin' });
Это позволяет передавать параметры между переходами без необходимости добавлять их в URL.
replace и управление историейПараметр replace контролирует, будет ли текущая запись
истории заменена или создана новая:
page.show('/settings', null, true, true); // Заменяет текущий URL в истории
page.show('/settings', null, true, false); // Добавляет новый URL в историю
Использование replace: true особенно полезно для
редиректов или переходов после успешного выполнения действий, когда не
требуется, чтобы пользователь возвращался на предыдущий URL через кнопку
“назад”.
Все middleware, зарегистрированные через
page('*', callback), автоматически вызываются при переходе
через page.show(), если параметр dispatch
установлен в true.
Пример глобального middleware:
page('*', ctx => {
console.log('Middleware сработал для', ctx.path);
});
page('/blog', () => console.log('Страница блога'));
page.show('/blog'); // В консоли сначала middleware, потом 'Страница блога'
Если dispatch: false, middleware и маршрут не
вызываются, но URL обновляется.
page.show()Метод поддерживает асинхронные функции в маршрутах, позволяя обрабатывать данные перед рендерингом:
page('/posts/:id', async ctx => {
const response = await fetch(`/api/posts/${ctx.params.id}`);
const post = await response.json();
console.log(post.title);
});
page.show('/posts/42'); // Асинхронный рендер
page.show() корректно инициирует выполнение асинхронных
маршрутов и ждёт завершения промисов внутри middleware.
page.show() для программного
навигирования при действиях, инициированных скриптами,
например, после отправки формы.state для передачи
данных между маршрутами.replace: true для редиректов, чтобы не
засорять историю переходов.dispatch, если
требуется изменение URL без перерендеринга.page.show() является мощным инструментом для контроля
маршрутизации в SPA на базе Page.js, предоставляя
гибкость в управлении навигацией, состоянием и историей браузера.