Solid Router — это официальная библиотека маршрутизации для фреймворка Solid.js, предназначенная для управления навигацией в одностраничных приложениях (SPA). Она обеспечивает возможности для маршрутизации, обработки URL, а также динамической подгрузки компонентов, аналогично другим популярным решениям, таким как React Router, но с акцентом на производительность и реактивность.
Для начала необходимо установить сам фреймворк Solid.js, если он ещё не установлен. Затем добавляется Solid Router, который является дополнительным пакетом.
npm install solid-js
npm install solid-app-router
Эта команда добавит все необходимые зависимости для работы с маршрутизацией в вашем проекте.
После установки библиотеки можно перейти к настройке маршрутов. Solid Router работает через компоненты, которые обрабатывают URL-пути и рендерят соответствующие компоненты на основе маршрута.
В Solid Router маршруты определяются через компонент
<Routes>. Каждый маршрут прописывается внутри
компонента <Route>, где указывается путь и компонент,
который должен рендериться при соответствующем переходе.
Пример базовой конфигурации маршрутов:
import { Routes, Route } from "solid-app-router";
import { render } from "solid-js/web";
import Home from "./pages/Home";
import About from "./pages/About";
function App() {
return (
<Routes>
<Route path="/" component={Home} />
<Route path="/about" component={About} />
</Routes>
);
}
render(App, document.getElementById("root"));
В этом примере при переходе по пути / будет отображаться
компонент Home, а при переходе по пути /about
— компонент About.
Solid Router поддерживает динамические маршруты, которые могут быть
использованы для обработки параметров URL. Динамические сегменты
определяются с помощью двоеточия :.
Пример динамического маршрута:
<Route path="/user/:id" component={User} />
В этом примере параметр id будет доступен в компоненте
User через объект params.
Внутри компонента можно получить доступ к этому параметру с помощью
хука useParams:
import { useParams } from "solid-app-router";
function User() {
const params = useParams();
return <div>Пользователь с ID: {params.id}</div>;
}
Для управления переходами по маршрутам можно использовать хук
useNavigate. Он позволяет программно изменять URL, не
используя ссылки.
Пример программного перехода:
import { useNavigate } from "solid-app-router";
function GoToAbout() {
const navigate = useNavigate();
const goToAboutPage = () => {
navigate("/about");
};
return <button onCl ick={goToAboutPage}>Перейти на страницу «О нас»</button>;
}
Когда пользователь нажмёт на кнопку, произойдёт переход на страницу
/about.
В Solid Router можно управлять рендерингом компонентов с помощью условия. Например, если нужно отображать страницу входа только для незарегистрированных пользователей, можно использовать следующую конструкцию:
<Route path="/login" component={Login} />
<Route path="/dashboard" component={Dashboard} />
Если пользователь не авторизован, он будет перенаправлен на страницу входа:
import { useNavigate } from "solid-app-router";
function Dashboard() {
const navigate = useNavigate();
const user = null; // Здесь может быть логика проверки авторизации
if (!user) {
navigate("/login");
return null; // Рендерить ничего не нужно
}
return <div>Добро пожаловать на панель управления</div>;
}
Solid Router поддерживает несколько дополнительных возможностей для настройки маршрутизации.
Если в вашем приложении нужно использовать префикс для всех путей
(например, /app/*), можно настроить базовый путь для всех
маршрутов:
<Routes base="/app">
<Route path="/" component={Home} />
<Route path="/about" component={About} />
</Routes>
В этом случае все маршруты будут начинаться с /app, и
путь / будет соответствовать /app/.
Для реализации защиты маршрутов, например, для авторизованных пользователей, Solid Router позволяет использовать дополнительные логики внутри компонента маршрута. Это может быть полезно, если нужно ограничить доступ к определённым страницам.
Пример защищённого маршрута:
<Route path="/profile" component={ProtectedProfile} />
В компоненте ProtectedProfile можно добавлять логику
проверки авторизации:
import { useNavigate } from "solid-app-router";
function ProtectedProfile() {
const navigate = useNavigate();
const user = null; // Пример с отсутствием пользователя
if (!user) {
navigate("/login");
return null;
}
return <div>Профиль пользователя</div>;
}
Solid Router поддерживает динамическую подгрузку маршрутов, что
полезно для улучшения производительности за счёт асинхронной загрузки
компонентов. Это можно реализовать с помощью React-стиля
React.lazy() и Suspense:
import { Suspense } from "solid-js";
import { Routes, Route } from "solid-app-router";
const About = React.lazy(() => import("./pages/About"));
function App() {
return (
<Suspense fallback={<div>Загрузка...</div>}>
<Routes>
<Route path="/" component={Home} />
<Route path="/about" component={About} />
</Routes>
</Suspense>
);
}
Этот подход позволяет загружать компоненты только при необходимости, что значительно ускоряет начальную загрузку приложения.
Solid Router — это мощный инструмент для маршрутизации в приложениях на базе Solid.js. Он предоставляет множество возможностей, включая динамическую маршрутизацию, защиту маршрутов и поддержку ленивой загрузки компонентов. Благодаря высокому уровню производительности и интеграции с реактивной моделью Solid.js, Solid Router является отличным выбором для разработки одностраничных приложений.