Wat zijn Events?
Net als in HTML kan React reageren op gebruikersacties zoals:
- Klikken op een button
- Typen in een input veld
- Hoveren over een element
- Een formulier versturen
Voordeel in React:
Geen addEventListener meer nodig! Je schrijft events direct in je JSX.
React Event Syntax
React events schrijf je met camelCase in plaats van kleine letters:
onClickin plaats vanonclickonChangein plaats vanonchangeonMouseOverin plaats vanonmouseoveronSubmitin plaats vanonsubmit
En de event handlers schrijf je binnen curly braces {}:
HTML (fout in React):
<button onclick="handleClick()">Click</button>
React (goed):
<button onClick={handleClick}>Click</button>
onClick Events
Basis Voorbeeld
const Button = () => {
const handleClick = () => {
alert('Button werd geklikt!');
};
return (
<button onClick={handleClick}>
Klik mij!
</button>
);
};
export default Button;
Inline Event Handler
Voor simpele acties kun je de functie ook direct inline schrijven:
const Button = () => {
return (
<button onClick={() => alert('Geklikt!')}>
Klik mij!
</button>
);
};
Met State
import { useState } from 'react';
const Counter = () => {
const [count, setCount] = useState(0);
const handleClick = () => {
setCount(count + 1);
};
return (
<div>
<p>Count: {count}</p>
<button onClick={handleClick}>+1</button>
</div>
);
};
onChange Events
De onChange event wordt gebruikt voor input velden. Elke keer dat de gebruiker iets typt, wordt deze event getriggered.
Input Veld met State
import { useState } from 'react';
const NameInput = () => {
const [name, setName] = useState('');
const handleChange = (e) => {
setName(e.target.value);
};
return (
<div>
<input
type="text"
value={name}
onChange={handleChange}
placeholder="Typ je naam"
/>
<p>Hallo, {name}!</p>
</div>
);
};
Event Object (e):
e.target.value geeft de huidige waarde van het input veld. Dit is het meest gebruikte patroon in React!
Inline onChange
const NameInput = () => {
const [name, setName] = useState('');
return (
<input
value={name}
onChange={(e) => setName(e.target.value)}
/>
);
};
Praktische Voorbeelden
Toggle Button
const Toggle = () => {
const [isOn, setIsOn] = useState(false);
return (
<button onClick={() => setIsOn(!isOn)}>
{isOn ? 'Aan' : 'Uit'}
</button>
);
};
Form Submit
const Form = () => {
const [email, setEmail] = useState('');
const handleSubmit = (e) => {
e.preventDefault(); // Stop page refresh
alert(`Email: ${email}`);
};
return (
<form onSubmit={handleSubmit}>
<input
type="email"
value={email}
onChange={(e) => setEmail(e.target.value)}
/>
<button type="submit">Verstuur</button>
</form>
);
};
Belangrijk: Gebruik altijd e.preventDefault() bij form submit om te voorkomen dat de pagina refresht!
Mouse Events
const Hover = () => {
const [isHovered, setIsHovered] = useState(false);
return (
<div
onMouseEnter={() => setIsHovered(true)}
onMouseLeave={() => setIsHovered(false)}
style={{
backgroundColor: isHovered ? 'lightblue' : 'white',
padding: '20px'
}}
>
{isHovered ? 'Je hovert!' : 'Hover over mij'}
</div>
);
};
Belangrijke Regels
- camelCase:
onClick, nietonclick - Functie referentie:
onClick={handleClick}, nietonClick={handleClick()} - Event object: Gebruik
(e)om toegang te krijgen tot event data - preventDefault(): Gebruik dit bij forms om page refresh te stoppen
Veelgemaakte Fouten
Fout - Functie meteen uitvoeren:
<button onClick={handleClick()}> // Uitvoeren bij render!
Click
</button>
Goed - Functie referentie:
<button onClick={handleClick}> // Uitvoeren bij click
Click
</button>
Fout - Kleine letters:
<button onclick={handleClick}> // Werkt niet!
Goed - camelCase:
<button onClick={handleClick}> // Werkt!
Fout - Form submit zonder preventDefault:
const handleSubmit = (e) => {
// Pagina refresht!
alert('Submit');
};
Goed - Met preventDefault:
const handleSubmit = (e) => {
e.preventDefault(); // Stop refresh
alert('Submit');
};