2.12.3
MAC, Chrome 61,
https://codepen.io/anon/pen/EvKmNO?editors=001
S'il vous plaît se penche sur la console pour inspecter le comportement dans l'échantillon Codepen en cliquant sur les \, les \ et les \ éléments
La propriété cible de l'événement émis doit toujours être le \
L'événement est déclenché avec la cible définie sur d'autres éléments (éléments enfants)
Cliquer sur le texte et/ou l'icône dans le bouton change la propriété cible de l'événement en éléments \ ou \ au lieu d' élément
Je pense que c'est un bug... Pourriez-vous nous donner un PR pour le corriger ?
Bien sûr, je vais essayer de faire un PR cette semaine :+1:
@benjycui Je ne comprends pas très bien pourquoi la cible de l'événement doit toujours être définie sur l'élément button. La cible d'un événement doit être l'élément d'où provient l'événement.
@jddxf exactement, lorsque vous cliquez sur un <Button/>
vous vous attendez à ce qu'il soit passé comme cible, quelle que soit la partie du <Button/>
sur laquelle vous cliquez. (c'est toute la promesse de modules et de composants, un ensemble d'entrées et un ensemble de sorties cohérentes)
Maintenant, le composant Button peut avoir un <span/>
ou un autre élément sous le capot (qui n'est même pas utilisable car personne ne sait qu'il est là, c'est littéralement juste sous le capot), ces éléments peuvent être des wrappers, peuvent être invisibles ou intégrés dans le <Button/>
. imaginez maintenant que cliquer sur le même bouton se comporte différemment à chaque fois, uniquement parce que certaines fois vous avez cliqué sur le span
invisible à l'intérieur du Button
et parfois sur le Button
lui-même, que pour n'est certainement pas cohérente ou souhaitée.
Donc, à votre avis, imo, la cible de l'événement doit toujours être définie sur le bouton, lorsque l'élément Button
été cliqué (les sous-composants et les éléments doivent être cliqués)
@mim-Armand Vous avez compris. IMO, il peut être préférable de fournir une instance Button
comme argument dans le rappel si vous souhaitez offrir une cohérence au niveau des composants. Si l'argument est une instance Event
(ou plus précisément React.SyntheticEvent
), je suppose que sa cible est la véritable cible de l'événement, qui offre une cohérence au niveau dom.
En remarque, vous pouvez toujours faire référence au button
avec event.currentTarget
.
Commentaire le plus utile
@mim-Armand Vous avez compris. IMO, il peut être préférable de fournir une instance
Button
comme argument dans le rappel si vous souhaitez offrir une cohérence au niveau des composants. Si l'argument est une instanceEvent
(ou plus précisémentReact.SyntheticEvent
), je suppose que sa cible est la véritable cible de l'événement, qui offre une cohérence au niveau dom.En remarque, vous pouvez toujours faire référence au
button
avecevent.currentTarget
.