Skip to content

React Events

In React:

👉 Events are actions that happen in the UI (like click, typing, submit, hover)

React lets you listen to these events and run code.


User does something -> React catches it -> your function runs


function App() {
function handleClick() {
alert("Button clicked!");
}
return <button onClick={handleClick}>Click Me</button>;
}

👉 Flow:

User clicks -> onClick -> handleClick() runs

Warning: Important Syntax Difference (HTML vs React)

Section titled “Warning: Important Syntax Difference (HTML vs React)”
<button onclick="handleClick()">Click</button>

<button onClick={handleClick}>Click</button>

👉 Differences:

  • CamelCase (onClick)
  • Pass function, don’t call it

  • onClick
  • onDoubleClick
  • onMouseEnter
  • onMouseLeave

  • onKeyDown
  • onKeyUp

  • onChange
  • onSubmit
  • onFocus
  • onBlur

function App() {
const [value, setValue] = React.useState("");
return (
<input
value={value}
onChange={(e) => setValue(e.target.value)}
/>
);
}

👉 User types -> event -> state updates -> UI updates


Every event gives an object:

function handleClick(e) {
console.log(e);
}

👉 e = event object


function App() {
function handleChange(e) {
console.log(e.target.value);
}
return <input onChange={handleChange} />;
}

👉 e.target.value = input value


React uses:

👉 Synthetic Events (wrapper around browser events)

👉 Why?

  • Cross-browser compatibility
  • Same behavior everywhere

<button onClick={handleClick(5)}>Click</button>

👉 This runs immediately


<button onClick={() => handleClick(5)}>Click</button>

Example: form submit reloads page

function handleSubmit(e) {
e.preventDefault();
console.log("Form submitted");
}

👉 Events move from child -> parent

<div onClick={() => console.log("Parent")}>
<button onClick={() => console.log("Child")}>
Click
</button>
</div>

👉 Output:

Child
Parent

function handleClick(e) {
e.stopPropagation();
}

function Form() {
const [name, setName] = React.useState("");
function handleSubmit(e) {
e.preventDefault();
alert(name);
}
return (
<form onSubmit={handleSubmit}>
<input
value={name}
onChange={(e) => setName(e.target.value)}
/>
<button type="submit">Submit</button>
</form>
);
}

Event = user action -> React handler -> state update -> UI update


React events connect user actions -> your logic -> UI updates