# target 과 currentTarget 비교
DOM 이벤트의 컨텍스트에서 target 과 currentTarget는
이벤트와 관련된 다른 요소를 참조하는 이벤트 객체의 속성
target
이벤트 버블링에 관계없이 이벤트가 원래 발생한 요소
<ul onClick={(event) => console.log(event.target)}>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
currentTarget
즉, DOM 트리에서 버블링되거나 캡처될 때 현재 이벤트를 처리하고 있는 요소
<ul onClick={(event) => console.log(event.currentTarget)}>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
</ul>
* "target"
어떤 요소가 상호 작용했는지 정확히 알아야 하는 경우 사용
동적으로 생성된 항목 목록에 대한 클릭 처리와 같은 Event Deligation 패턴
* "currentTarget"
실제로 이벤트 리스너를 연결한 요소 참조
동일한 처리기가 여러 요소에서 사용되거나
처리기가 컴포넌트의 루트 요소에
연결된 컴포넌트에서 사용되는 경우
# preventDefault() 과 stopPropagation() 알아보기
이벤트 객체에 사용 가능한 메서드이며
이벤트 동작 제어하는데 사용
링크가 새 페이지로 이동하지 못하도록 하여 대신 사용자 지정 동작을 허용
document.getElementById('myForm').addEventListener('submit', (event) => {
event.preventDefault();
// custom handling
});
document.querySelector('a').addEventListener('click', (event) => {
event.preventDefault();
// custom handling
});
DOM 을 통한 이벤트 버블링을 중지하는데 사용
// 자식 요소를 클릭하면 click 이벤트 리스너가 트리거되지만
// 부모의 click 이벤트 리스너는 트리거되지 않음
document.getElementById('child').addEventListener('click', (event) => {
event.stopPropagation();
console.log('Child Clicked');
});
document.getElementById('parent').addEventListener('click', (event) => {
// 이거는 자식 요소가 클릭할 때 호출되지 않음
console.log('Parent Clicked');
});
📢 요약
- stopPropagation()
- 이벤트가 DOM 트리를 버블링하거나 캡처하는 것을 방지
- 기본적으로 이벤트를 대상 요소로 격리하는데 사용
- preventDefault()
- 이벤트와 관련된 기본 동작을 중지
- 사용자 지정 이벤트 동작을 정의할 수 있도록 하는 데 사용