Sur l'ordre des événements DOM: CAPTURING vs BUBBLING
Il y a deux étapes pour la façon dont les événements se propagent. Celles-ci sont appelées «capturer» et «bouillonner» .
| | / \
---------------| |----------------- ---------------| |-----------------
| element1 | | | | element1 | | |
| -----------| |----------- | | -----------| |----------- |
| |element2 \ / | | | |element2 | | | |
| ------------------------- | | ------------------------- |
| Event CAPTURING | | Event BUBBLING |
----------------------------------- -----------------------------------
L'étape de capture se produit en premier, puis est suivie de l'étape de bouillonnement. Lorsque vous enregistrez un événement à l'aide de l'API DOM standard, les événements feront partie de l'étape de bouillonnement par défaut, mais cela peut être spécifié lors de la création de l'événement
// CAPTURING event
button.addEventListener('click', handleClick, true)
// BUBBLING events
button.addEventListener('click', handleClick, false)
button.addEventListener('click', handleClick)
Dans React, les événements de bullage sont également ce que vous utilisez par défaut.
// handleClick is a BUBBLING (synthetic) event
<button onClick={handleClick}></button>
// handleClick is a CAPTURING (synthetic) event
<button onClickCapture={handleClick}></button>
Jetons un œil à l'intérieur de notre callback 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()
}
Une alternative que je n'ai pas vue mentionnée ici
Si vous appelez e.preventDefault () dans tous vos événements, vous pouvez vérifier si un événement a déjà été géré et empêcher qu'il ne soit à nouveau traité:
handleEvent(e) {
if (e.defaultPrevented) return // Exits here if event has been handled
e.preventDefault()
// Perform whatever you need to here.
}
Pour connaître la différence entre les événements synthétiques et les événements natifs, consultez la documentation React: https://reactjs.org/docs/events.html