Overzicht
Na installatie ziet je project er zo uit:
workout-tracker/
├── .next/ ← build cache (automatisch aangemaakt, niet aanpassen)
├── app/
│ ├── favicon.ico
│ ├── globals.css
│ ├── layout.js ← Root layout (omhult alle pagina's)
│ └── page.js ← Homepage (route: /)
├── public/ ← Statische bestanden (afbeeldingen etc.)
├── .gitignore
├── next.config.mjs
├── package.json
└── postcss.config.mjs
💡 Het belangrijkste om te onthouden
Alles wat in de app/ map staat bepaalt je routes. Een map = een URL. Dit is de kern van
Next.js routing.
De app/ map
De app/ map is het hart van je Next.js project. Elke map erin wordt een URL route.
app/
├── page.js → route: /
├── layout.js → gedeelde wrapper
├── workouts/
│ ├── page.js → route: /workouts
│ └── [id]/
│ └── page.js → route: /workouts/123
app/page.js→ bezoekers zien/(homepage)app/workouts/page.js→ bezoekers zien/workoutsapp/workouts/[id]/page.js→ dynamische route zoals/workouts/42
💡 Analoog aan MERN
In MERN had je aparte backend routes (/api/workouts) en een aparte React app. In Next.js zit
alles in één project, in de app/ map.
Speciale Bestanden
Next.js kent een aantal bestanden met een vaste naam die een speciale functie hebben:
layout.js — Gedeelde wrapper
Alles wat in layout.js staat, wordt getoond op elke pagina. Denk aan navigatie en footer.
// app/layout.js
export default function RootLayout({ children }) {
return (
<html lang="nl">
<body>
<nav>Workout Tracker</nav>
{children} {/* ← hier komt je pagina */}
</body>
</html>
);
}
page.js — De pagina zelf
Dit is de inhoud van een specifieke route. Elke map heeft zijn eigen page.js.
// app/page.js → route: /
export default function Home() {
return <h1>Welkom bij Workout Tracker</h1>;
}
loading.js — Laadscherm
Wordt getoond terwijl de pagina data ophaalt. Next.js toont dit automatisch.
// app/workouts/loading.js
export default function Loading() {
return <p>Workouts laden...</p>;
}
error.js — Foutpagina
Wordt getoond als er iets fout gaat. Moet een Client Component zijn.
// app/workouts/error.js
'use client';
export default function Error({ error }) {
return <p>Fout: {error.message}</p>;
}
not-found.js — 404 pagina
// app/not-found.js
export default function NotFound() {
return <h2>Pagina niet gevonden</h2>;
}
💡 Overzicht speciale bestanden
| Bestand | Functie |
|---|---|
layout.js |
Gedeelde wrapper om pagina's heen |
page.js |
Inhoud van de route |
loading.js |
Laadscherm tijdens data fetching |
error.js |
Foutpagina als iets misgaat |
not-found.js |
404 pagina |
De public/ map
Afbeeldingen en andere statische bestanden zet je in public/. Ze zijn bereikbaar via de root
URL.
public/
├── logo.png → bereikbaar via /logo.png
└── icons/
└── dumbbell.svg → bereikbaar via /icons/dumbbell.svg
// Gebruik in een component:
<img src="/logo.png" alt="Logo" />
Project Opruimen
De standaard Next.js installatie bevat demo-content. Ruim dit op zodat je met een schone basis start.
Stap 1: Vervang app/page.js
// app/page.js
export default function Home() {
return (
<main>
<h1>Workout Tracker</h1>
<p>Bekijk je workouts</p>
</main>
);
}
Stap 2: Vervang app/globals.css
Verwijder alle inhoud uit globals.css en vervang met:
/* app/globals.css */
@import "tailwindcss";
Stap 3: Update app/layout.js
// app/layout.js
import './globals.css';
export const metadata = {
title: 'Workout Tracker',
description: 'Bijhouden van je workouts',
};
export default function RootLayout({ children }) {
return (
<html lang="nl">
<body>
{children}
</body>
</html>
);
}
✅ Je hebt nu een schone basis
Sla op en check http://localhost:3000 — je ziet "Workout Tracker" als koptekst.
Checklist
✅ Check of je hebt:
- Mappenstructuur begrepen
app/page.jsopgeschoondapp/globals.cssopgeschoondapp/layout.jsbijgewerkt- "Workout Tracker" zichtbaar op
http://localhost:3000
Volgende Stap
Structuur is helder! Tijd om pagina's en navigatie toe te voegen.
Maak een overzichtspagina en detailpagina voor workouts