UI-patronen zijn het verschil tussen een React-app die groeit en een React-app die na sprint acht alleen de oorspronkelijke maker durft aan te raken. De module UI Patronen van NLCodeCraft Frontend Academy gaat over knoppen, formulierrijen, lege staten en tokens — niet over “mooi maken”. Mark van Leeuwen traint u om een kleine component library te bouwen die een design system kan voeden, zonder dat u morgen een intern Material-kloon moet onderhouden.

Instroom: React-basis uit onze React cursus of gelijkwaardig. CSS-fundament uit het Lab of aantoonbaar in uw werk. Wij starten niet met Storybook als u nog geen button-varianten in code kunt uitleggen. Tooling volgt het patroon, niet omgekeerd.
Tokens eerst, componenten daarna, pagina’s laatst
Kleur, ruimte, typografie en radius horen in een token-laag. Daarna composities: Button, TextField, Card, Banner. Daarna pas pagina’s die die stukken gebruiken. Wie andersom werkt, kopieert hex-codes tot het merk wijzigt. Amsterdamse merken wijzigen vaker dan u denkt.
| Laag | Voorbeeld | Eigendom |
|---|---|---|
| Tokens | –ncc-space-200, –ncc-color-ink | Design + frontend samen |
| Primitieven | Button, Input, Icon | Frontend library |
| Patronen | FormRow, EmptyState, PageHeader | Productteam |
| Pagina’s | Intake, dashboard | Feature-team |
Leermodules UI
Varianten zonder explosie
primary/secondary/destructive, sm/md. Geen twaalf boolean-props die elkaar tegenspreken.
Toegankelijke interactie
focus-visible, naam, disabled vs. aria. Een div met onClick is geen knop, ook niet met Tailwind.
Formulieren als systeem
label, hint, error, describedby. Validatie-UI is een patroon, geen ad-hoc rood randje.
Documenteren wat groeit
Eén pagina per primitief: wanneer wel, wanneer niet. Storybook mag, een Markdown-dossier ook.
Wij koppelen deze module aan Testing voor de interactieve primitieve: een Button zonder toetsenbordtest is onaf. En aan TypeScript: variant-unies in plaats van stringly props. Zie de TypeScript-track als u die unies nog niet vloeiend schrijft.
type ButtonVariant = "primary" | "secondary" | "danger";
type ButtonProps = {
variant?: ButtonVariant;
children: React.ReactNode;
type?: "button" | "submit";
} & Omit<React.ButtonHTMLAttributes<HTMLButtonElement>, "type">;
Eindopdracht: vijf primitieve componenten plus twee patronen, met tokens en een korte governance-zin: wie mag een nieuw variant toevoegen. Mark van Leeuwen merget geen library waarin iedereen “gewoon even een prop” toevoegt. Dat is hoe design systems sterven.
Veelgestelde vragen
Is Figma verplicht?
U krijgt tokens en een briefing. Wie Figma meebrengt, mag mappen. Wie alleen code heeft, werkt vanuit de briefing.
Tailwind of CSS-modules?
Beide komen langs als patroon. De les is de laagindeling, niet de religie.
Moeten wij Radix of Headless UI gebruiken?
Optioneel. Eerst begrijpen wat een dialog doet, daarna een library kiezen.
Voor wie is dit te zwaar?
Voor wie nog geen herbruikbare React-component heeft gebouwd. Volg eerst React.
Leslocatie en bereik in Amsterdam
NLCodeCraft geeft klassikale en hybride frontend-opleidingen vanaf de Wibautstraat, op de Knowledge Mile tussen Amstel en Weesperplein. Cursisten komen uit de onderstaande stadsdelen; avondgroepen starten na kantoortijd zodat u vanuit Zuid, Noord of Oud-West kunt aansluiten zonder een extra reisdag in te plannen.
- Centrum
- De Pijp
- Oud-West
- Oost
- Watergraafsmeer
- Amsterdam-Noord
- Zuid
- Westerpark
NLCodeCraft Frontend Academy
Uw aanspreekpunt: Mark van Leeuwen
Wibautstraat 131
1091 GL Amsterdam
Telefoon: +31 20 244 3188
E-mail: [email protected]