Nestede ruter og Outlet-layouts
Bygg flernivå-layouts for ruter ved å bruke nestede -elementer og -komponenten.
Nestede ruter og Outlet-layouts er en gratis leksjon i React Academy på CoddyKit. Dette er leksjon 1 av 4. Du kan lese hele leksjonen gratis nedenfor – og deretter øve praktisk i nettleseren med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i React Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i React Academy inneholder totalt 4 leksjoner.
Hva er nestede ruter?
Med nestede ruter i React Router v6 kan De sette sammen oppsett: En overordnet rute gjengir en ramme (navigasjon, sidestolpe), og underordnede ruter fyller innholdsområdet via <Outlet />.
Definere nestede ruter
Plasser underordnede <Route>-elementer inne i en overordnet <Route> i ruterkonfigurasjonen. Den overordnede stien er et prefiks for alle underordnede ruter.
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
const router = createBrowserRouter([
{
path: '/',
element: <RootLayout />,
children: [
{ path: 'dashboard', element: <Dashboard /> },
{ path: 'settings', element: <Settings /> },
],
},
]);Outlet-komponenten
<Outlet /> er en plassholder i den overordnede layout-komponenten. React Router erstatter den med elementet til den samsvarende underordnede ruten.
function RootLayout() {
return (
<div>
<nav>
<Link to="/dashboard">Dashboard</Link>
<Link to="/settings">Settings</Link>
</nav>
<main>
<Outlet /> {/* child route renders here */}
</main>
</div>
);
}Indeksruter
En index: true-rute gjengis når den overordnede URL-en samsvarer nøyaktig, og fungerer som standardrute når ingen annen underordnet sti samsvarer.
{
path: '/',
element: <RootLayout />,
children: [
{ index: true, element: <Home /> }, // renders at '/'
{ path: 'about', element: <About /> },
],
}Nesting på flere nivåer
Ruter kan nestes på flere nivåer. Hver layout-komponent i kjeden gjengir en <Outlet /> for sine egne underordnede ruter.
const router = createBrowserRouter([
{
path: '/app',
element: <AppShell />,
children: [
{
path: 'users',
element: <UsersLayout />,
children: [
{ index: true, element: <UserList /> },
{ path: ':id', element: <UserDetail /> },
],
},
],
},
]);Outlet-kontekst
Send data fra en layout til nestede underordnede ruter via context-prop-en på <Outlet />, og les dem med useOutletContext() i de underordnede rutene.
// Parent layout
function UsersLayout() {
const [selected, setSelected] = useState(null);
return <Outlet context={{ selected, setSelected }} />;
}
// Child route
function UserDetail() {
const { selected } = useOutletContext();
return <div>{selected}</div>;
}Navngitte layouter med ruter uten sti
En rute uten en path omslutter underordnede ruter bare for layoutens skyld, uten å legge til et URL-segment. Dette er nyttig for å gruppere ruter under en felles layout.
{
element: <AuthenticatedLayout />, // no path
children: [
{ path: '/profile', element: <Profile /> },
{ path: '/billing', element: <Billing /> },
],
}Relative lenker i nestede ruter
Inne i en nestet rute tolkes <Link to='sibling'> relativt til den gjeldende rute-stien, på samme måte som relative URL-er i HTML.
// Inside /app/users — link goes to /app/users/new
function UserList() {
return <Link to="new">Add User</Link>;
}useMatch i nestede ruter
useMatch(pattern) returnerer samsvarsdata når den gjeldende URL-en samsvarer med mønsteret, noe som er nyttig for å style aktive lenker i nestede layouter.
function NavLink({ to, children }) {
const match = useMatch(to);
return (
<Link to={to} className={match ? 'active' : ''}>
{children}
</Link>
);
}Feilgrenser per segment
Legg til en errorElement i en hvilken som helst nestet rute for å fange opp feil bare i dette segmentet, uten å få hele layout-rammen til å krasje.
{
path: 'users',
element: <UsersLayout />,
errorElement: <UsersError />,
children: [
{ path: ':id', element: <UserDetail /> },
],
}Praktisk mønster: Dashboard-layout
Et typisk dashboard bruker en rute på øverste nivå for appens ramme (topptekst og sidestolpe), med nestede ruter for hver seksjon. Dermed forblir rammen montert, mens bare innholdsområdet endres.
function DashboardShell() {
return (
<div className="dashboard">
<Sidebar />
<div className="content">
<Outlet />
</div>
</div>
);
}Kunnskapssjekk
Hvilken komponent må en overordnet layout gjengi for å vise den samsvarende underordnede ruten?
Oppsummering
Nestede ruter lar overordnede ruter gjengi vedvarende layouter, mens underordnede ruter fyller ut <Outlet />. Bruk indeksruter for standardruter, ruter uten sti for delte layouter, og useOutletContext for å sende data nedover.
Lær deg React med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 88
- Leksjoner
- 324
Ofte stilte spørsmål
Er leksjonen «Nestede ruter og Outlet-layouts» gratis?
Ja – hele teksten i «Nestede ruter og Outlet-layouts» er gratis å lese her på nettet. For å øve interaktivt med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt, og for å låse opp resten av React Academy-kurset, kan du oppgradere til CoddyKit PRO. Kurset i React Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Nestede ruter og Outlet-layouts»?
Bygg flernivå-layouts for ruter ved å bruke nestede -elementer og -komponenten. Du øver på React Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med React Academy?
Ingen tidligere erfaring er nødvendig. React Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Nestede ruter og Outlet-layouts»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne React Academy-leksjonen?
Ja. Alle React Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Nestede ruter og Outlet-layouts
- Loaders og actions (Data Router-API)
- Beskyttede ruter og auth guards
- Håndtere state i URL-ens søkeparametere