History API в Atomico обеспечивает управление навигацией и состоянием истории браузера без полной перезагрузки страницы. Это ключевой инструмент при создании одностраничных приложений (SPA), где требуется динамическая смена маршрутов с сохранением состояния и возможности использования кнопок «назад» и «вперед».
История браузера состоит из последовательности состояний, каждая из которых может содержать данные, URL и заголовок. Atomico предоставляет обёртку над стандартным History API, добавляя реактивность и удобные хуки для компонентов.
Метод pushState используется для навигации к новому
маршруту, сохраняя при этом возможность вернуться назад. В Atomico это
часто интегрируется через хук useHistory.
import { useHistory } from "atomico";
function MyComponent() {
const history = useHistory();
function navigateToProfile() {
history.pushState({ userId: 123 }, "Профиль пользователя", "/profile/123");
}
return <button oncl ick={navigateToProfile}>Перейти в профиль</button>;
}
Особенности:
data может содержать любое состояние компонента,
которое будет доступно при возврате к этому URL.title влияет на заголовок вкладки, однако его поддержка
браузерами ограничена.url не вызывает перезагрузку страницы, но изменяет
адрес в адресной строке.Метод replaceState применяется, если нужно обновить
текущую запись, не добавляя новую:
history.replaceState({ ...history.state, updated: true }, "Обновлено", window.location.pathname);
Atomico позволяет отслеживать изменения истории через хук
useHistory, который возвращает объект состояния и методы
управления. Это упрощает синхронизацию маршрутов с компонентами и
визуальными элементами:
import { useHistory } from "atomico";
function CurrentRoute() {
const { state, location } = useHistory();
return <div>Текущий путь: {location.pathname}, данные состояния: {JSON.stringify(state)}</div>;
}
Событие popstate срабатывает при возврате к предыдущей
записи или переходе вперед. Atomico автоматически интегрирует это с
хуком useHistory, что делает работу реактивной:
import { useHistory } from "atomico";
function HistoryLogger() {
const history = useHistory();
history.onPopState(({ state, location }) => {
console.log("Поп-стейт:", state, "URL:", location.pathname);
});
return null;
}
Это позволяет компонентам обновляться автоматически при изменении истории, обеспечивая консистентность интерфейса.
History API является фундаментом для маршрутизаторов на Atomico. Можно создавать собственные решения или использовать готовые:
Пример минимального маршрутизатора:
import { useHistory, c } from "atomico";
function Router({ routes }) {
const { location } = useHistory();
const route = routes.find(r => r.path === location.pathname);
return route ? c(route.component) : <div>Страница не найдена</div>;
}
History API поддерживает любые изменения URL, включая query-параметры и hash:
history.pushState({}, "", "/search?query=atomico#results");
window.location.search и
window.location.hash можно использовать для извлечения
параметров и состояния.useHistory, обеспечивая реактивное обновление
компонентов.pushState для навигации на новые
страницы.replaceState для обновления текущего
состояния без создания новой записи.state истории, чтобы сохранять данные при возврате
назад.popstate для корректного
восстановления интерфейса.History API в Atomico превращает стандартную навигацию браузера в мощный инструмент для SPA, делая маршруты реактивными, состояние управляемым, а переходы — плавными и без перезагрузки страницы.