2.12.3
MAC, 铬 61,
https://codepen.io/anon/pen/EvKmNO?editors=001
请查看控制台以检查 Codepen 示例中的行为,同时单击 \ 、 \和 \元素
发出事件的目标属性应始终为 \
该事件是在目标设置为其他元素(子元素)的情况下触发的
单击按钮中的文本和/或图标会将事件的目标属性更改为 \或 \元素而不是元素
向孩子们添加规则pointer-events: none
可以解决问题,但这只是一个建议,因为我不确定这实际上是错误还是功能..
我认为这是一个错误......你能给我们一个公关来修复它吗?
当然,这周我会尝试做一个 PR :+1:
@benjycui我不太明白为什么事件目标应该始终设置为按钮元素。 事件的目标应该是事件发生的元素。
@jddxf确切地说,当您单击<Button/>
您希望它作为目标传递,无论您单击<Button/>
哪个部分。 (这是模块和组件的全部承诺,一组输入和一组一致的输出)
现在 Button 组件可能在引擎盖下有一个<span/>
或其他元素(甚至无法使用,因为没有人知道它在那里,它几乎就在引擎盖下),这些元素可能是包装器,可能是不可见的或集成的在<Button/>
。 现在想象一下,每次点击同一个 Button 的行为都不同,只是因为有时您点击了Button
不可见的span
Button
,有时点击了Button
本身,对于肯定是不一致或不想要的。
所以在你看来,imo 事件目标应该始终设置为按钮,当Button
元素被点击时(子组件和元素应该是点击通过)
@mim-Armand 明白你的意思。 IMO,如果您想提供组件级一致性,最好在回调中提供Button
实例作为参数。 如果参数是Event
(或更具体地说React.SyntheticEvent
)实例,我想它的目标是真正的事件目标,它提供了 dom 级别的一致性。
作为旁注,您始终可以使用event.currentTarget
来引用button
event.currentTarget
。
最有用的评论
@mim-Armand 明白你的意思。 IMO,如果您想提供组件级一致性,最好在回调中提供
Button
实例作为参数。 如果参数是Event
(或更具体地说React.SyntheticEvent
)实例,我想它的目标是真正的事件目标,它提供了 dom 级别的一致性。作为旁注,您始终可以使用
event.currentTarget
来引用button
event.currentTarget
。