Вложенные маршруты через общий layout
Шапка не дублируется по страницам: маршруты вложены в один Layout, а конкретная страница подставляется в Outlet. index-маршрут отдаёт главную по тому же пути, что и сам layout, — это ровно тот приём, который в реальных проектах экономит больше всего разметки.
function App() {
return (
<Routes>
<Route path="/" element={<Layout />}>
<Route index element={<HomePage />} />
<Route path="/about" element={<About />} />
<Route path="/forms" element={<Forms />} />
</Route>
</Routes>
);
}
const Layout = () => (
<>
<header className="flex justify-center">
<Link className="mr-3" to="/">Home</Link>
<Link className="mx-3" to="/about">About</Link>
<Link className="mx-3" to="/forms">Forms</Link>
</header>
<Outlet />
</>
);