Хеш-навигация представляет собой механизм, с помощью которого можно
управлять состоянием и переходами внутри веб-приложения, используя
фрагменты URL (после символа #). Этот подход позволяет
изменять URL без перезагрузки страницы, что особенно важно для
одностраничных приложений (SPA), где пользователю необходимо
переключаться между различными состояниями интерфейса.
В библиотеке Petite-Vue хеш-навигация реализуется с использованием встроенного API для отслеживания изменений в URL. Она позволяет создать динамичные, многокомпонентные интерфейсы, которые могут обновляться на основе фрагмента URL, обеспечивая плавный и интерактивный пользовательский опыт.
При использовании хеш-навигации браузер отслеживает изменения в URL,
начиная с символа #. Эти изменения не приводят к
перезагрузке страницы, что делает переходы между состояниями быстрыми и
плавными. В отличие от обычных URL-переходов, хеш-URL не вызывает
запроса к серверу, что делает их идеальными для SPA-приложений.
Пример хеш-URL:
https://example.com/#/home
Здесь фрагмент URL /home указывает на конкретную секцию
или состояние интерфейса, которое отображается на странице. Изменение
этого фрагмента позволяет переключать представление внутри приложения
без перезагрузки страницы.
Petite-Vue предлагает простой способ интеграции хеш-навигации через привязку данных и реактивность. В отличие от более тяжелых фреймворков, библиотека ориентирована на простоту и минимализм, но сохраняет мощь реактивного подхода для работы с DOM.
Для работы с хеш-навигацией в Petite-Vue нужно создать реактивное состояние, которое будет отслеживать изменения фрагмента URL. Используя механизмы реактивности, можно автоматически обновлять интерфейс при изменении хеша.
Пример базового компонента с хеш-навигацией:
<div id="app">
<div x-text="currentPage"></div>
</div>
<script src="https://unpkg.com/petite-vue"></script>
<script>
PetiteVue.createApp({
currentPage: window.location.hash || '#/home',
init() {
window.addEventListener('hashchange', () => {
this.currentPage = window.location.hash;
});
}
}).mount('#app');
</script>
В этом примере:
currentPage хранится текущий фрагмент
URL.init добавляет обработчик события
hashchange, который обновляет состояние компонента при
изменении хеша.Одним из часто встречающихся применений хеш-навигации является управление переходами между разными “страницами” или разделами в приложении. В рамках Petite-Vue это может быть легко реализовано с помощью условного рендеринга компонентов.
Пример многокомпонентного приложения с хеш-навигацией:
<div id="app">
<div x-show="currentPage === '#/home'">Главная страница</div>
<div x-show="currentPage === '#/about'">О нас</div>
<div x-show="currentPage === '#/contact'">Контакты</div>
</div>
<script src="https://unpkg.com/petite-vue"></script>
<script>
PetiteVue.createApp({
currentPage: window.location.hash || '#/home',
init() {
window.addEventListener('hashchange', () => {
this.currentPage = window.location.hash;
});
}
}).mount('#app');
</script>
Здесь:
Главная страница, О нас,
Контакты) отображаются в зависимости от текущего фрагмента
URL.#/home на
#/about), меняется содержимое на странице.При разработке сложных SPA важно не только переключать представления, но и сохранять внутреннее состояние при изменении URL. В этом контексте хеш-навигация становится полезным инструментом для сохранения контекста в URL, что позволяет восстанавливать состояние при обновлении страницы.
Пример с сохранением состояния:
<div id="app">
<div x-show="currentPage === '#/home'">Главная страница</div>
<div x-show="currentPage === '#/about'">О нас</div>
<button x-on:click="navigateTo('#/home')">Перейти на главную</button>
<button x-on:click="navigateTo('#/about')">Перейти в раздел 'О нас'</button>
</div>
<script src="https://unpkg.com/petite-vue"></script>
<script>
PetiteVue.createApp({
currentPage: window.location.hash || '#/home',
init() {
window.addEventListener('hashchange', () => {
this.currentPage = window.location.hash;
});
},
navigateTo(hash) {
window.location.hash = hash;
}
}).mount('#app');
</script>
В этом примере кнопки переключают страницы, обновляя хеш в URL с
помощью метода navigateTo. Таким образом, при переходах
сохраняется состояние, и пользователь может вернуться к нужному разделу,
даже после обновления страницы.
History API. Это
ограничивает возможности в случае, если требуется более сложная
навигация.Для более сложных случаев, когда требуется полная поддержка истории
браузера и переходов, можно использовать History API вместо
хешей. Этот подход позволяет управлять состоянием URL без использования
символа # и имеет более гибкие возможности для работы с
историей и динамическими переходами.