← Niveau 3 – Meester

Les 6 van 10 ⏱ 90 minuten Premium

De grote herbouw: je website in React

Schrijf je Level 1-website opnieuw in React. Dezelfde website, voor de derde keer – nu als een pro.

Je missie

Je neemt je website uit Levels 1–2 en bouwt hem opnieuw in React. Klinkt als een stap terug? Niet zo – het is de beste training: je hebt inhoud en design al uitgezocht, dus je focust puur op de nieuwe techniek. En aan het eind zie je zwart op wit waarom de professionals het de moeite waard vinden.

Het herbouwplan

  1. Splits de website in componenten. Pak papier en potlood (serieus!) en schets je website als boxen: Header, Gallery, Quiz, Footer… Elke box = één bestand in src/.

  2. Verplaats de HTML naar componenten. Kopieer stuk voor stuk uit je oude .html-bestanden naar JSX. Let op de bekende verschillen: classclassName, elke component geeft één wrapper-element terug. Kopieer je afbeeldingen naar de map public/ in het Vite-project – dan werken paden als /images/team.jpg ongewijzigd.

  3. Verplaats de CSS. Kopieer de inhoud van je style.css naar src/App.css. Het zou bijna ongewijzigd moeten werken – CSS blijft CSS.

  4. Haal de data uit in arrays. Kaarten, uitslagen, galerijfoto’s – alles wat herhaalt, wordt een array van objecten + .map(), zoals in de componentenles.

  5. Herschrijf de Level 2-spreuken als state. Hier een conversietabel:

    Level 2 (gewoon JavaScript)React
    getElementById + textContentstate + {value} in JSX
    addEventListener("click", ...)onClick={...}
    classList.toggle + CSS .hiddenboolean state + {condition && (...)}
    een teller met een variabeleuseState met een getal

Ik laat je zien: donkere modus op de React-manier

Laten we één spreuk samen herschrijven, zodat je de conversie ziet:

import { useState } from 'react';
import Header from './Header.jsx';
import Gallery from './Gallery.jsx';

function App() {
  const [dark, setDark] = useState(
    localStorage.getItem("mode") === "dark"
  );

  function toggleMode() {
    const newMode = !dark;
    setDark(newMode);
    localStorage.setItem("mode", newMode ? "dark" : "light");
  }

  return (
    <div className={dark ? "dark" : ""}>
      <Header onToggle={toggleMode} dark={dark} />
      <Gallery />
    </div>
  );
}

export default App;

En in Header.jsx krijgt de knop een functie als prop:

function Header({ onToggle, dark }) {
  return (
    <header>
      <h1>My website</h1>
      <button onClick={onToggle}>{dark ? "☀️" : "🌙"}</button>
    </header>
  );
}

Nog één nieuw ding: een prop kan ook een functie zijn. App bezit de state en leent zijn kind een knop om die te schakelen. Dit heet “state leeft bovenaan” en is het meest voorkomende patroon in React.

Herbouw-checklist

💡

Vastlopen hoort erbij. Deze les is een marathon, geen sprint – splits hem gerust over meerdere dagen. Als je vastzit: de console (F12), de foutmelding van Vite en vergelijken met voorbeelden uit eerdere lessen. Zo debugt een pro.

Controleer jezelf: Je website draait op localhost en ziet er (bijna) hetzelfde uit als voorheen – maar vanbinnen bestaat hij uit componenten, data en state. Voeg nu één kaart toe aan de data-array en kijk hoe weinig werk dat is. Dat is de hele reden dat React bestaat.

Wat neem je mee uit deze les