2.12.3
MAC, Chrome 61,
https://codepen.io/anon/pen/EvKmNO?editors=001
Por favor, mira a la consola para inspeccionar el comportamiento de la muestra Codepen mientras hace clic en los \, los \ \ y los elementos
La propiedad objetivo del evento emitido siempre debe ser \
El evento se activa con el objetivo establecido en otros elementos (elementos secundarios).
Al hacer clic en el texto y / o el icono en el botón, la propiedad de destino del evento cambia a los elementos \ o \ en lugar del elemento.
Creo que es un error ... ¿Podrías darnos un PR para solucionarlo?
Seguro, intentaré hacer un PR esta semana: +1:
@benjycui No entiendo muy bien por qué el objetivo del evento siempre debe establecerse en el elemento de botón. El objetivo de un evento debe ser el elemento donde se origina el evento.
@jddxf exactamente, cuando hace clic en un <Button/>
espera que se pase como el objetivo, independientemente de en qué parte del <Button/>
haga clic. (esa es toda la promesa de módulos y componentes, un conjunto de entradas y un conjunto de salidas consistentes)
Ahora, el componente Botón puede tener un <span/>
u otro elemento debajo del capó (que ni siquiera se puede usar ya que nadie sabe que está allí, literalmente está justo debajo del capó), estos elementos pueden ser envoltorios, pueden ser invisibles o integrados en el <Button/>
. ahora imagine que hacer clic en el mismo Botón se comporta de manera diferente cada vez, solo porque algunas veces hizo clic en el span
invisible dentro del Button
y algunas veces en el Button
mismo, que por seguro que no es consistente o deseado.
Entonces, a su punto, en mi opinión, el objetivo del evento siempre debe establecerse en el botón, cuando se hizo clic en el elemento Button
(los subcomponentes y elementos deben ser de clic)
@ mim-Armand Entendí tu punto. En mi opinión, puede ser mejor proporcionar una instancia Button
como argumento en la devolución de llamada si desea ofrecer consistencia a nivel de componente. Si el argumento es una instancia Event
(o más específicamente React.SyntheticEvent
), supongo que su objetivo es el objetivo del evento real, que ofrece consistencia a nivel dom.
Como nota al margen, siempre puede hacer referencia a button
con event.currentTarget
.
Comentario más útil
@ mim-Armand Entendí tu punto. En mi opinión, puede ser mejor proporcionar una instancia
Button
como argumento en la devolución de llamada si desea ofrecer consistencia a nivel de componente. Si el argumento es una instanciaEvent
(o más específicamenteReact.SyntheticEvent
), supongo que su objetivo es el objetivo del evento real, que ofrece consistencia a nivel dom.Como nota al margen, siempre puede hacer referencia a
button
conevent.currentTarget
.