Preact Router — это легковесная библиотека для организации маршрутизации в приложениях на Preact. Она обеспечивает управление навигацией между компонентами без перезагрузки страницы, реализуя подход Single Page Application (SPA). Основная задача маршрутизатора — сопоставление URL с определёнными компонентами и управление состоянием истории браузера.
Для использования Preact Router необходимо установить пакет через npm или yarn:
npm install preact-router
# или
yarn add preact-router
После установки импортируются ключевые элементы:
import { Router, Route } from 'preact-router';
Router — контейнер маршрутов, Route —
отдельный маршрут (опционально, можно использовать JSX внутри Router
напрямую).
Маршруты задаются с помощью атрибута path, а компонент,
отображаемый по маршруту — через component.
import Home from './pages/Home';
import About from './pages/About';
import Contact from './pages/Contact';
<Router>
<Home path="/" />
<About path="/about" />
<Contact path="/contact" />
</Router>
Поддерживаются динамические параметры через двоеточие
::
<UserProfile path="/user/:id" />
В компонент UserProfile будет передан объект
props, содержащий параметр id.
Для переходов используется стандартный <a> с
href или функция route из
preact-router.
import { route } from 'preact-router';
<button onCl ick={() => route('/about')}>О нас</button>
Функция route позволяет программно изменять маршрут без
обновления страницы.
Для маршрутов, которые не совпадают с заданными, можно задать компонент для 404:
<Router>
<Home path="/" />
<About path="/about" />
<NotFound default />
</Router>
Атрибут default указывает, что компонент должен
рендериться при отсутствии совпадений.
Preact Router поддерживает вложенные маршруты, что позволяет строить сложные структуры страниц:
<Router>
<Dashboard path="/dashboard">
<Stats path="/stats" />
<Settings path="/settings" />
</Dashboard>
</Router>
Вложенные маршруты рендерятся в дочернем компоненте, который должен
содержать <Router> внутри себя.
Router поддерживает событие onChange, которое вызывается
при каждом изменении маршрута.
<Router onCha nge={handleRoute}>
<Home path="/" />
<About path="/about" />
</Router>
function handleRoute(e) {
console.log('Текущий путь:', e.url);
}
Событие предоставляет объект с информацией о текущем маршруте:
url, matches, previous. Это
позволяет реализовать кастомную логику, например, анимацию переходов или
обновление мета-тегов.
Для оптимизации загрузки можно использовать динамический импорт компонентов:
import { lazy } from 'preact/compat';
const About = lazy(() => import('./pages/About'));
<Router>
<Home path="/" />
<About path="/about" />
</Router>
Компонент подгружается только при переходе на соответствующий маршрут, что снижает начальный размер бандла.
Preact Router не обрабатывает query-параметры напрямую. Они доступны
через объект location браузера:
function SearchPage() {
const params = new URLSearchParams(window.location.search);
const query = params.get('q');
return <div>Результаты поиска: {query}</div>;
}
Для полноценной работы с query-параметрами можно использовать сторонние утилиты или кастомные хуки.
Router использует History API браузера, что позволяет:
window.history.back());window.history.forward());route('/path', true)
для замены текущего маршрута без добавления в историю.Preact Router минимально нагружает приложение за счёт:
Использование вложенных маршрутов и lazy-loading компонентов позволяет строить крупные SPA без потери производительности.
<Router>
<Home path="/" />
<UserProfile path="/user/:id" />
<Dashboard path="/dashboard">
<Router>
<Stats path="/stats" />
<Settings path="/settings" />
</Router>
</Dashboard>
<NotFound default />
</Router>
В этом примере реализована многоуровневая маршрутизация с динамическими параметрами, вложенными роутами и fallback-компонентом.
Preact Router обеспечивает простое и гибкое управление маршрутизацией, сохраняя лёгкость и высокую производительность приложений на Preact.