Layout Routes — это мощный инструмент для организации маршрутов в приложении React, позволяющий создавать повторно используемые макеты страниц и управлять вложенной маршрутизацией. Они обеспечивают чистую структуру кода и упрощают поддержку интерфейса, где несколько страниц используют один и тот же шаблон.
В React Router Layout Route определяется как маршрут, который сам по себе не отображает конкретный контент, а предоставляет каркас для вложенных маршрутов. Обычно это компоненты, содержащие общие элементы интерфейса: навигацию, футер, боковую панель и другие повторяющиеся блоки.
Пример базового layout:
import { Outlet } from "react-router-dom";
function MainLayout() {
return (
<div>
<header>
<h1>Моё приложение</h1>
<nav>
<a href="/">Главная</a>
<a href="/about">О нас</a>
</nav>
</header>
<main>
<Outlet />
</main>
<footer>© 2026</footer>
</div>
);
}
export default MainLayout;
Ключевой момент: компонент Outlet — это
место, где будут рендериться все вложенные маршруты. Без него layout не
сможет отображать содержимое дочерних страниц.
Вложенные маршруты задаются через массив объектов маршрутов или JSX с
использованием <Route>:
import { Routes, Route } from "react-router-dom";
import MainLayout from "./MainLayout";
import Home from "./Home";
import About from "./About";
function App() {
return (
<Routes>
<Route path="/" element={<MainLayout />}>
<Route index element={<Home />} />
<Route path="about" element={<About />} />
</Route>
</Routes>
);
}
export default App;
Здесь MainLayout является родительским
маршрутом, а Home и About — его
вложенными маршрутами. Атрибут index
указывает на маршрут по умолчанию для layout.
React Router позволяет вкладывать layout друг в друга, создавая иерархию. Пример с публичной и админской частью приложения:
function AdminLayout() {
return (
<div>
<nav>Админ меню</nav>
<Outlet />
</div>
);
}
<Routes>
<Route path="/" element={<MainLayout />}>
<Route index element={<Home />} />
<Route path="about" element={<About />} />
<Route path="admin" element={<AdminLayout />}>
<Route index element={<AdminDashboard />} />
<Route path="users" element={<AdminUsers />} />
</Route>
</Route>
</Routes>
В этом примере AdminLayout вложен в
MainLayout, что позволяет наследовать общий интерфейс и
одновременно иметь специфический админский шаблон.
Layout Routes хорошо сочетаются с ленивой загрузкой компонентов для оптимизации производительности:
import { lazy, Suspense } from "react";
const Home = lazy(() => import("./Home"));
const About = lazy(() => import("./About"));
<Route path="/" element={<MainLayout />}>
<Route
index
element={
<Suspense fallback={<div>Загрузка...</div>}>
<Home />
</Suspense>
}
/>
<Route
path="about"
element={
<Suspense fallback={<div>Загрузка...</div>}>
<About />
</Suspense>
}
/>
</Route>
Использование Suspense позволяет отображать индикатор
загрузки при асинхронной подгрузке страниц.
Layout Routes позволяют использовать все возможности React Router:
useNavigate, useLocation, NavLink
внутри layout для динамического изменения состояния и навигации.
Пример:
import { NavLink, useLocation } from "react-router-dom";
function Sidebar() {
const location = useLocation();
return (
<aside>
<NavLink to="/" className={location.pathname === "/" ? "active" : ""}>
Главная
</NavLink>
<NavLink to="/about" className={location.pathname === "/about" ? "active" : ""}>
О нас
</NavLink>
</aside>
);
}
Такой подход позволяет layout быть не просто контейнером, но и интерактивным элементом интерфейса.
Layout Routes формируют основу современной структуры React-приложений, обеспечивая гибкость и масштабируемость при построении сложных интерфейсов с повторяющимися компонентами. Их правильное использование позволяет создать модульную архитектуру с легкой поддержкой и расширением функционала.