In der Reihenfolge der DOM-Ereignisse: CAPTURING vs BUBBLING
Es gibt zwei Stufen für die Ausbreitung von Ereignissen. Diese werden als "Erfassen" und "Sprudeln" bezeichnet .
| | / \
---------------| |----------------- ---------------| |-----------------
| element1 | | | | element1 | | |
| -----------| |----------- | | -----------| |----------- |
| |element2 \ / | | | |element2 | | | |
| ------------------------- | | ------------------------- |
| Event CAPTURING | | Event BUBBLING |
----------------------------------- -----------------------------------
Die Erfassungsphase findet zuerst statt, gefolgt von der Sprudelphase. Wenn Sie ein Ereignis mit der regulären DOM-API registrieren, sind die Ereignisse standardmäßig Teil der Bubbling-Phase. Dies kann jedoch bei der Ereigniserstellung angegeben werden
// CAPTURING event
button.addEventListener('click', handleClick, true)
// BUBBLING events
button.addEventListener('click', handleClick, false)
button.addEventListener('click', handleClick)
In React werden standardmäßig auch sprudelnde Ereignisse verwendet.
// handleClick is a BUBBLING (synthetic) event
<button onClick={handleClick}></button>
// handleClick is a CAPTURING (synthetic) event
<button onClickCapture={handleClick}></button>
Werfen wir einen Blick in unseren handleClick-Rückruf (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()
}
Eine Alternative, die ich hier nicht erwähnt habe
Wenn Sie in all Ihren Ereignissen e.preventDefault () aufrufen, können Sie überprüfen, ob ein Ereignis bereits behandelt wurde, und verhindern, dass es erneut behandelt wird:
handleEvent(e) {
if (e.defaultPrevented) return // Exits here if event has been handled
e.preventDefault()
// Perform whatever you need to here.
}
Informationen zum Unterschied zwischen synthetischen Ereignissen und nativen Ereignissen finden Sie in der React-Dokumentation: https://reactjs.org/docs/events.html