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