Event
μ΄λ²€νΈλ λ¨μ΄ κ·Έλλ‘ "μ¬κ±΄"μ λ§νλλ°, μ¬μ©μμ νλμΌλ‘ μΈν΄ λ°μνλ DOM μμμ λ³κ²½μ΄ μΌμ΄λλ μΈν°λμ μ λ§νλ€. μ½κ² λ§ν΄ ν΄λ¦μ΄λ κ° μ λ ₯ μ²λΌ κΈ°μ‘΄μ DOM μμμμ μ΄λ ν λ³κ²½μ΄ μΌμ΄λλ κ²μ λͺ¨λ μ΄λ²€νΈλΌκ³ λ§νλ€.
νΉμ μ΄λ²€νΈκ° λ°μνλ©΄ μ΄λ»κ² μ²λ¦¬ν κ²μΈμ§λ₯Ό κ°λ°μκ° μ½λλ‘ κ΅¬ννλ©°, μ΄ μ½λλ‘ κ΅¬νν μ²λ¦¬ ν¨μλ₯Ό λ°λ‘ μ΄λ²€νΈ νΈλ€λ¬ λΌκ³ νκ³ , μ΄λ²€νΈ νΈλ€λ¬ μμμ μ΄λ²€νΈμ μ 보λ₯Ό λ΄μ μ¬μ© λλ κ°μ²΄κ° λ°λ‘ μ΄λ²€νΈ κ°μ²΄ e
μ΄λ€.
// μ¬μ©μκ° μ
λ ₯ν λ λ°μνλ change μ΄λ²€νΈμ μ 보λ₯Ό λ΄μ μ΄λ²€νΈκ°μ²΄ e λ₯Ό μ¬μ©νλ μ΄λ²€νΈ νΈλ€λ¬ ν¨μμ΄λ€.
const handleChange = (e:ChangeEvent<HTMLInputElement>) => {
console.log(e.target.value);
}
Event Bubbling
λΈλΌμ°μ μμ μ΄λ²€νΈκ° λ°μνκ² λλ©΄, μ΄λ²€νΈκ° λ°μν μμμ μ΅μμ μμκΉμ§ μ΄λ²€νΈλ₯Ό μ νμν€λλ° μ΄κ²μ λ°λ‘ μ΄λ²€νΈ λ²λΈλ§μ΄λΌκ³ νλ€.
const Parent = () => {
const handleClick = () => {
console.log('λΆλͺ¨ μ»΄ν¬λνΈ ν΄λ¦')
}
return (
<div onClick={handleClick}>
<h1></h1>
<Child />
</div>
)
}
const Child = () => {
const handleClick = (e) => {
// e.stopPropagation();
console.log('μμ μ»΄ν¬λνΈ ν΄λ¦')
}
return <button onClick={handleClick}>μμ μ»΄ν¬λνΈ λ²νΌ</button>
}
μ μ½λλ 리μ‘νΈλ₯Ό μ¬μ©ν΄ κ°λ¨ν μ΄λ²€νΈ λ²λΈλ§μ ꡬνν μμμ΄λ€. μμμ»΄ν¬λνΈμΈ λ²νΌμ ν΄λ¦νκ² λλ©΄ "μμ μ»΄ν¬λνΈ ν΄λ¦" μ΄λΌλ λ‘κ·Έμ ν¨κ» λΆλͺ¨ μ»΄ν¬λνΈλ₯Ό ν΄λ¦νμλ λ°μνλ μ΄λ²€νΈ νΈλ€λ¬ ν¨μλ κ°μ΄ μ€νλλ€. λ§μ½ μ΄λ²€νΈ λ²λΈλ§μ λ§μΌλ €λ©΄ μ£Όμμ²λ¦¬κ° λμ΄μλ e.stopPropagation()
μ μ¬μ©νμ¬ μ νλ₯Ό λ§μμ μλ€.
Event Capturing
μ΄λ²€νΈ μΊ‘μ²λ§μ λ²λΈλ§κ³Ό λ°λλ‘ μ΅μμ μμμμ μ΄λ²€νΈκ° λ°μν μμλ₯Ό νμν΄ λ΄λ €κ°λ κ²μ λ§νλ€.
const Parent = () => {
const handleCaptureClick = () => {
console.log('λΆλͺ¨ μ»΄ν¬λνΈμ ν΄λ¦ μ΄λ²€νΈκ° μΊ‘μ²λ§λμμ΅λλ€.');
};
return (
<div onClickCapture={handleCaptureClick}>
λΆλͺ¨ μ»΄ν¬λνΈ
<Child />
</div>
);
};
const Child = () => {
const handleClick = () => {
console.log('μμ μ»΄ν¬λνΈμ ν΄λ¦ μ΄λ²€νΈκ° λ²λΈλ§λμμ΅λλ€.');
};
return <button onClick={handleClick}>μμ μ»΄ν¬λνΈ λ²νΌ</button>;
};
λ²λΈλ§μ μμμλ λ€λ₯΄κ² λΆλͺ¨ μ»΄ν¬λνΈμ div μμμ onClickCapture
λΌλ μμ±μ μ¬μ©ν΄ μΊ‘μ²λ§ μ΄λ²€νΈ νΈλ€λ¬λ₯Ό λ±λ‘νλ€. μ΄ν λ²νΌμ ν΄λ¦νκ² λλ©΄ μμ μμκΉμ§ μΊ‘μ²λ§ λ ν , λ€μ λ²λΈλ§λμ΄ λΆλͺ¨ μ»΄ν¬λνΈκΉμ§ μ΄λ²€νΈκ° μ νλλ€.
Event Delegation
μ΄λ²€νΈ μμμ μμ μμμμ νμ μμμ μ΄λ²€νΈλ€μ μ μ΄νλ κ²μ λ§νλ€. μ½κ² λ§ν΄ 곡ν΅μ μμ μμμμ νμ μμμ μ΄λ²€νΈλ₯Ό λ€λ£¨λ κ²μ΄λ€.
const Parent = () => {
const handleClick = (event) => {
const target = event.target;
if (target.classList.contains('child1')) {
console.log('첫 λ²μ§Έ μμμ΄ ν΄λ¦λμμ΅λλ€.');
} else if (target.classList.contains('child2')) {
console.log('λ λ²μ§Έ μμμ΄ ν΄λ¦λμμ΅λλ€.');
} else if (target.classList.contains('child3')) {
console.log('μΈ λ²μ§Έ μμμ΄ ν΄λ¦λμμ΅λλ€.');
}
};
return (
<div onClick={handleClick}>
λΆλͺ¨ μ»΄ν¬λνΈ
<Child1 />
<Child2 />
<Child3 />
</div>
);
};
const Child1 = () => {
return <button className="child1">첫 λ²μ§Έ μμ μ»΄ν¬λνΈ λ²νΌ</button>;
};
const Child2 = () => {
return <button className="child2">λ λ²μ§Έ μμ μ»΄ν¬λνΈ λ²νΌ</button>;
};
const Child3 = () => {
return <button className="child3">μΈ λ²μ§Έ μμ μ»΄ν¬λνΈ λ²νΌ</button>;
};
μ μ½λμ²λΌ μ¬λ¬ μμμ κ°μ§κ³ μμλ, μμλ€μ ν΄λ¦μ΄λ²€νΈλ₯Ό 곡ν΅λ λΆλͺ¨μμ κ΄λ¦¬νλ κ²μ λ§νλ€.
Last updated