캡처링 단계 => 타깃 단계 => 버블링 단계
자식요소에서 부모요소로 이벤트를 전파하는 방법, 기본적으로 자바스크립트에서 이벤트 버블링은 발생을 한다.
만약에 자식요소인 버튼2,버튼3이나 자식요소로 이미지 태그등을 사용할때 버튼 1의 event.target을 가리키고 싶다면 e.currentTarget 을 사용하면 된다.
const buttonHandler = (e) => {
alert(e.target.id);
console.log(e.currentTarget )
};
=====================================
<div>
<button id="버튼1" onClick={buttonHandler}>
버튼 1
<button id="버튼2">
버튼2
<button id="버튼3">버튼3</button>
</button>
</button>
</div>
이벤트 버블링을 중단하게 한다면 문제점들이 있으므로 함부로 막는것을 사용하지 않는 것을 권장합니다. 하지만 같은 이벤트를 처리하는 요소가 상위에 존재해서 사용을 할 떄도 있습니다.
// 이벤트 버블링 중단하기
event.stopPropagation()
부모요소에서 자식요소로 이벤트를 전파하는 방법
부모요소에서 자식요소로 이벤트를 전파하는 방법으로 거의 사용이 되지 않는다.
react에서는 Event명 + Capture를 이용해서 캡처링을 사용한다.
예를 들어 onClick 이벤트이면 onClickCapture 와 같이 사용하면된다.
버튼3에 이벤트를 넣어놓고 부모요소인 버튼1과 버튼2를 클릭하면 이벤트 캡처링에 의해서 사용을 할 수 있다.
const buttonHandler = (e) => {
alert(e.target.id);
};
=====================================
<div>
<button id="버튼1" onClickCapture={buttonHandler}>
버튼 1
<button id="버튼2" onClickCapture={buttonHandler}>
버튼2
<button id="버튼3" onClick={buttonHandler}>
버튼3
</button>
</button>
</button>
</div>
여러개의 자식요소에서 동일한 이벤트를 처리해야한다면 상위 요소에 이벤트를 1개 선언해서 처리하는 방식이다.
<div>
<button id="button">
button <br />
<button id="button1" onClick={buttonHandler}>
button1
</button>
<br />
<button id="button2" onClick={buttonHandler}>
button2
</button>
<br />
<button id="button3" onClick={buttonHandler}>
button3
</button>
<br />
<button id="button4" onClick={buttonHandler}>
button4
</button>
<br />
</button>
</div>
<div>
<button id="button" onClick={buttonHandler}>
button <br />
<button id="button1">
button1
</button>
<br />
<button id="button2">
button2
</button>
<br />
<button id="button3">
button3
</button>
<br />
<button id="button4">
button4
</button>
<br />
</button>
</div>