목표
- 이벤트 처리하기에 대해 알아보기
React 엘리먼트에서 이벤트를 처리하는 방식은 DOM 엘리먼트에서 이벤트를 처리하는 방식과 매우 유사합니다. 몇 가지 문법 차이는 다음과 같습니다.
- React의 이벤트는 소문자 대신 캐멀 케이스(camelCase)를 사용합니다.
- JSX를 사용하여 문자열이 아닌 함수로 이벤트 핸들러를 전달합니다.
<!-- HTML -->
<button onclick="activateLasers()">
Activate Lasers
</button>
// React
<button onClick={activateLasers}>
Activate Lasers
</button>
<form onsubmit="console.log('You clicked submit.'); return false">
<button type="submit">Submit</button>
</form>
function Form() {
function handleSubmit(e) {
e.preventDefault();
console.log('You clicked submit.');
}
return (
<form onSubmit={handleSubmit}>
<button type="submit">Submit</button>
</form>
);
}
export default function Event() {
const onClick = (e) => {
console.dir(e);
};
return (
<div>
<button onClick={onClick}>button</button>
</div>
);
}
<style>
body * {
margin: 10px;
border: 1px solid blue;
}
</style>
<form>FORM</form>
<script>
for (let elem of document.querySelectorAll('*')) {
elem.addEventListener("click", e => console.log(`캡쳐링: ${elem.tagName}`), true);
elem.addEventListener("click", e => console.log(`버블링: ${elem.tagName}`));
}
document.querySelector("form").onclick = function () {
console.log("click");
};
</script>
// 결과
"Capturing: HTML"
"Capturing: BODY"
"Capturing: FORM"
"Bubbling: FORM"
"click"
"Bubbling: BODY"
"Bubbling: HTML"
export default function Event() {
const onClickCaputreParent = () => {
console.log("onClickCaputreDivParent");
};
const onClickCaputreChild = () => {
console.log("onClickCaputreDivChild");
};
const onClickCaputreButton = () => {
console.log("onClickCaputreButton");
};
const onClickBubbleParent = () => {
console.log("onClickBubbleDivParent");
};
const onClickBubbleChild = () => {
console.log("onClickBubbleDivChild");
};
const onClickBubbleButton = (e) => {
console.log("onClickBubbleButton");
console.log(e);
};
return (
<div onClickCapture={onClickCaputreParent} onClick={onClickBubbleParent}>
<div onClickCapture={onClickCaputreChild} onClick={onClickBubbleChild}>
<button
onClickCapture={onClickCaputreButton}
onClick={onClickBubbleButton}
>
button
</button>
</div>
</div>
);
}
// 결과
"onClickCaputreDivParent"
"onClickCaputreDivChild"
"onClickCaputreButton"
"onClickBubbleButton"
SyntheticBaseEvent {_reactName: 'onClick', _targetInst: null, type: 'click', nativeEvent: PointerEvent, target: button, …}
"onClickBubbleDivChild"
"onClickBubbleDivParent"
function Example() {
return (
<input
onFocus={(e) => {
console.log('Focused on input');
}}
onBlur={(e) => {
console.log('Triggered because this input lost focus');
}}
placeholder="onFocus is triggered when you click this input."
/>
)
}