2.12.3
MAC, Chrome 61,
https://codepen.io/anon/pen/EvKmNO?editors=001
Por favor, olha para o console para inspecionar o comportamento na amostra Codepen enquanto clica nos \, os \ e \ elementos
A propriedade target do evento emitido deve ser sempre o \
O evento é acionado com o destino definido para outros elementos (elementos filhos)
Clicar no texto e / ou ícone no botão muda a propriedade alvo do evento para os elementos \ ou \ ao elemento
Eu acho que é um bug ... Você poderia nos dar um PR para consertar isso?
Claro, vou tentar fazer um PR esta semana: +1:
@benjycui Não entendo muito bem por que o destino do evento sempre deve ser definido como o elemento botão. O destino de um evento deve ser o elemento onde o evento se origina.
@jddxf exatamente, quando você clica em <Button/>
você espera que ele seja passado como o destino, independentemente da parte de <Button/>
você clicar. (essa é toda a promessa de módulos e componentes, um conjunto de entradas e um conjunto de saídas consistentes)
Agora o componente Button pode ter um <span/>
ou outro elemento por baixo do capô (que nem mesmo pode ser usado, pois ninguém sabe que está lá, está literalmente logo abaixo do capô), esses elementos podem ser invólucros, podem ser invisíveis ou integrados no <Button/>
. agora imagine que clicar no mesmo botão se comporta de maneira diferente a cada vez, só porque algumas vezes você clicou no span
invisível dentro do Button
e algumas vezes no próprio Button
, que por com certeza não é consistente ou desejado.
Então, para o seu ponto, imo o destino do evento deve sempre ser definido como o botão, quando o elemento Button
foi clicado (subcomponentes e elementos devem ser clicados)
@ mim-Armand Entendi. IMO, pode ser melhor fornecer uma instância Button
como um argumento no retorno de chamada se você quiser oferecer consistência em nível de componente. Se o argumento for uma instância Event
(ou mais especificamente React.SyntheticEvent
), suponho que seu alvo seja o alvo do evento real, que oferece consistência de nível dom.
Como uma observação lateral, você sempre pode se referir a button
com event.currentTarget
.
Comentários muito úteis
@ mim-Armand Entendi. IMO, pode ser melhor fornecer uma instância
Button
como um argumento no retorno de chamada se você quiser oferecer consistência em nível de componente. Se o argumento for uma instânciaEvent
(ou mais especificamenteReact.SyntheticEvent
), suponho que seu alvo seja o alvo do evento real, que oferece consistência de nível dom.Como uma observação lateral, você sempre pode se referir a
button
comevent.currentTarget
.