В Page.js управление историей браузера реализуется
через методы page() и встроенные возможности HTML5 History
API. Для замены текущей записи истории используется метод
page.replace(), который позволяет изменить URL без
добавления новой записи в стек истории. Это особенно полезно для
динамических приложений, где необходимо обновлять адрес страницы без
возможности возврата к предыдущему состоянию.
page.replacepage.replace(path, callback);
page().Пример базового использования:
page('/home', () => {
console.log('Пользователь находится на главной странице');
});
page('/profile', () => {
console.log('Пользователь перешел в профиль');
page.replace('/profile/edit'); // заменяет URL без добавления новой записи в историю
});
В этом примере при переходе на /profile URL изменится на
/profile/edit, но кнопка «назад» в браузере вернёт
пользователя не на /profile, а на предыдущую страницу перед
/profile.
page.replace от обычного переходаМетод page() добавляет новую запись в историю
браузера:
page('/about');
page.replace() изменяет URL текущей страницы без
добавления новой записи, то есть предыдущая страница остаётся
прежней.Использование page.replace() особенно актуально для
таких сценариев, как:
function handleLogin(user) {
if (user.isAuthenticated) {
page.replace('/dashboard'); // заменяем URL после успешного входа
}
}
page('/login', () => {
renderLoginForm();
});
После вызова page.replace('/dashboard') пользователь
попадет на /dashboard, но кнопка «назад» не вернёт его на
страницу логина, что улучшает UX.
page.replace() позволяет безопасно менять параметры URL
без создания лишних записей:
function filterProducts(category) {
const newPath = `/products?category=${category}`;
page.replace(newPath); // обновляет фильтр в адресной строке
}
Page.js поддерживает middleware для выполнения действий перед
обработкой маршрута. page.replace() может использоваться
внутри middleware:
page('*', (ctx, next) => {
if (!ctx.path.startsWith('/public')) {
console.log(`Посещение приватного маршрута: ${ctx.path}`);
}
next();
});
page('/private', () => {
console.log('Пользователь в приватной зоне');
page.replace('/private/home'); // обновление адреса без добавления в историю
});
Такой подход позволяет гибко управлять навигацией и логикой редиректов, сохраняя при этом корректную историю браузера.
page.replace() является ключевым инструментом для
современных SPA, где навигация должна оставаться динамичной, а история
браузера — логичной и предсказуемой.