DOM 이벤트 순서 : CAPTURING vs BUBBLING
이벤트가 전파되는 방법에는 두 단계가 있습니다. 이를 "캡처" 및 "버블 링"이라고 합니다.
| | / \
---------------| |----------------- ---------------| |-----------------
| element1 | | | | element1 | | |
| -----------| |----------- | | -----------| |----------- |
| |element2 \ / | | | |element2 | | | |
| ------------------------- | | ------------------------- |
| Event CAPTURING | | Event BUBBLING |
----------------------------------- -----------------------------------
캡처 단계가 먼저 발생한 다음 버블 링 단계가 이어집니다. 일반 DOM API를 사용하여 이벤트를 등록 할 때 이벤트는 기본적으로 버블 링 단계의 일부가되지만 이벤트 생성시 지정할 수 있습니다.
// CAPTURING event
button.addEventListener('click', handleClick, true)
// BUBBLING events
button.addEventListener('click', handleClick, false)
button.addEventListener('click', handleClick)
React에서 버블 링 이벤트도 기본적으로 사용합니다.
// handleClick is a BUBBLING (synthetic) event
<button onClick={handleClick}></button>
// handleClick is a CAPTURING (synthetic) event
<button onClickCapture={handleClick}></button>
handleClick 콜백 (React) 내부를 살펴 보겠습니다.
function handleClick(e) {
// This will prevent any synthetic events from firing after this one
e.stopPropagation()
}
function handleClick(e) {
// This will set e.defaultPrevented to true
// (for all synthetic events firing after this one)
e.preventDefault()
}
여기서 언급하지 않은 대안
모든 이벤트에서 e.preventDefault ()를 호출하면 이벤트가 이미 처리되었는지 확인하고 다시 처리되지 않도록 할 수 있습니다.
handleEvent(e) {
if (e.defaultPrevented) return // Exits here if event has been handled
e.preventDefault()
// Perform whatever you need to here.
}
합성 이벤트와 네이티브 이벤트의 차이점은 React 문서 ( https://reactjs.org/docs/events.html)를 참조하십시오.