En el orden de los eventos DOM: CAPTURAR vs BURBUJAR
Hay dos etapas sobre cómo se propagan los eventos. Estos se denominan "captura" y "burbujeo" .
| | / \
---------------| |----------------- ---------------| |-----------------
| element1 | | | | element1 | | |
| -----------| |----------- | | -----------| |----------- |
| |element2 \ / | | | |element2 | | | |
| ------------------------- | | ------------------------- |
| Event CAPTURING | | Event BUBBLING |
----------------------------------- -----------------------------------
La etapa de captura ocurre primero y luego es seguida por la etapa de burbujeo. Cuando registra un evento utilizando la API DOM normal, los eventos serán parte de la etapa de burbujeo de forma predeterminada, pero esto se puede especificar al crear el evento.
// CAPTURING event
button.addEventListener('click', handleClick, true)
// BUBBLING events
button.addEventListener('click', handleClick, false)
button.addEventListener('click', handleClick)
En React, los eventos de burbujeo también son lo que usa de forma predeterminada.
// handleClick is a BUBBLING (synthetic) event
<button onClick={handleClick}></button>
// handleClick is a CAPTURING (synthetic) event
<button onClickCapture={handleClick}></button>
Echemos un vistazo dentro de nuestro handleClick callback (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()
}
Una alternativa que no he visto mencionada aquí.
Si llama a e.preventDefault () en todos sus eventos, puede verificar si un evento ya ha sido manejado y evitar que se maneje nuevamente:
handleEvent(e) {
if (e.defaultPrevented) return // Exits here if event has been handled
e.preventDefault()
// Perform whatever you need to here.
}
Para conocer la diferencia entre eventos sintéticos y eventos nativos, consulte la documentación de React: https://reactjs.org/docs/events.html