Переходы между страницами

Petite-Vue предоставляет удобные способы реализации переходов между страницами в одностраничных приложениях (SPA) с помощью механизмов маршрутизации и анимаций. Это позволяет пользователям создавать динамичные интерфейсы с плавными переходами между различными частями приложения.

Основные подходы к маршрутизации

Для реализации переходов между страницами в Petite-Vue часто используется внешняя библиотека для маршрутизации, такая как page.js или vue-router. Эти инструменты позволяют организовать навигацию между различными состояниями приложения и обеспечивать динамическую подгрузку контента в зависимости от маршрута.

Пример использования маршрутизации с page.js:

import page from 'page';

page('/', () => {
  document.getElementById('app').innerHTML = '<h1>Главная страница</h1>';
});

page('/about', () => {
  document.getElementById('app').innerHTML = '<h1>О нас</h1>';
});

page();

В этом примере определяется два маршрута: для главной страницы и страницы “О нас”. При изменении URL-сегмента контент в элементе с id app заменяется в соответствии с текущим маршрутом.

Использование Vue-компонентов для представлений

В контексте Petite-Vue, представления обычно обрабатываются с использованием компонентов. Для переключения между различными экранами нужно использовать динамическую подгрузку компонентов и обрабатывать их отображение в зависимости от активного маршрута.

Пример переключения компонентов:

import { h, render } from 'petite-vue';

const HomePage = {
  template: '<h1>Главная страница</h1>',
};

const AboutPage = {
  template: '<h1>О нас</h1>',
};

const App = {
  data() {
    return { currentPage: 'home' };
  },
  computed: {
    component() {
      if (this.currentPage === 'home') {
        return HomePage;
      } else if (this.currentPage === 'about') {
        return AboutPage;
      }
    },
  },
  template: `
    <div>
      <button @click="currentPage = 'home'">Главная</button>
      <button @click="currentPage = 'about'">О нас</button>
      <component :is="component"></component>
    </div>
  `,
};

render(App, document.getElementById('app'));

В этом примере используется директива component для динамической загрузки нужного компонента в зависимости от состояния currentPage. Переходы между страницами происходят при клике на кнопки, что изменяет состояние и вызывает рендеринг соответствующего компонента.

Анимации при переходах

Добавление анимаций к переходам между страницами улучшает пользовательский опыт. В Petite-Vue можно использовать стандартные CSS-анимations или переходы для реализации плавных анимаций. Для этого используется специальный компонент <transition>, который позволяет обрабатывать изменения состояния с анимацией.

Пример анимации при смене компонентов:

<template>
  <transition name="fade" @before-enter="beforeEnter" @enter="enter" @leave="leave">
    <component :is="component"></component>
  </transition>
</template>

<style>
.fade-enter-active, .fade-leave-active {
  transition: opacity 0.5s;
}
.fade-enter, .fade-leave-to {
  opacity: 0;
}
</style>

В данном примере, когда компонент будет заменяться, будет происходить плавное изменение прозрачности, создавая эффект плавного перехода между экранами.

Ленивая загрузка и оптимизация производительности

Для больших приложений важно учитывать производительность и эффективно загружать контент. В Petite-Vue можно использовать lazy loading компонентов, что позволяет загружать только те компоненты, которые в данный момент необходимы.

Пример ленивая загрузка компонента:

const AboutPage = defineAsyncComponent(() => import('./AboutPage.vue'));

const App = {
  data() {
    return { currentPage: 'home' };
  },
  computed: {
    component() {
      if (this.currentPage === 'home') {
        return HomePage;
      } else if (this.currentPage === 'about') {
        return AboutPage;
      }
    },
  },
};

Использование defineAsyncComponent позволяет отложить загрузку компонента до того момента, когда он будет действительно необходим, что улучшает начальную загрузку приложения и снижает нагрузку на сеть.

Обработка параметров маршрута

Многие приложения требуют обработки параметров URL для отображения различных данных. В Petite-Vue параметры маршрута можно обрабатывать с помощью библиотеки маршрутизации, например, page.js, или с использованием простых механизмов внутри компонента.

Пример с параметрами маршрута:

page('/user/:id', (ctx) => {
  const userId = ctx.params.id;
  document.getElementById('app').innerHTML = `<h1>Профиль пользователя ${userId}</h1>`;
});

page();

В этом примере параметр id из URL используется для отображения профиля конкретного пользователя. Таким образом, можно динамически изменять отображаемый контент в зависимости от данных, передаваемых через URL.

Управление состоянием между страницами

Для более сложных приложений может понадобиться управление состоянием между различными страницами. В Petite-Vue можно использовать глобальные переменные или хранилище данных, чтобы сохранять состояние между переходами.

Пример с глобальным состоянием:

const state = {
  currentPage: 'home',
};

const App = {
  data() {
    return { state };
  },
  template: `
    <div>
      <button @click="state.currentPage = 'home'">Главная</button>
      <button @click="state.currentPage = 'about'">О нас</button>
      <component :is="state.currentPage === 'home' ? HomePage : AboutPage"></component>
    </div>
  `,
};

Здесь state хранит текущее состояние приложения, и на его основе переключаются компоненты. Это позволяет сохранять состояние даже при переходах между страницами.

Заключение

Механизмы переходов между страницами в Petite-Vue позволяют легко создавать динамичные интерфейсы с плавной навигацией. Используя компоненты, маршрутизацию, анимации и оптимизацию загрузки, можно создать производительные и удобные одностраничные приложения с отличным пользовательским опытом.