2.12.3
MAC, Chrome 61,
https://codepen.io/anon/pen/EvKmNO?editors=001
Посмотрите на консоль, чтобы проверить поведение в примере Codepen, щелкая элементы \ , \ и \
Я думаю, что это ошибка ... Не могли бы вы дать нам пиар, чтобы исправить это?
Конечно, на этой неделе я постараюсь сделать пиар: +1:
@benjycui Я не совсем понимаю, почему целью события всегда должен быть элемент кнопки. Целью события должен быть элемент, из которого происходит событие.
@jddxf точно, когда вы нажимаете на <Button/>
вы ожидаете, что он будет передан как цель, независимо от того, на какой части <Button/>
вы щелкнете. (это все обещания модулей и компонентов, набор входов и набор согласованных выходов)
Теперь компонент Button может иметь <span/>
или другой элемент под капотом (который даже не может использоваться, поскольку никто не знает, что он там, он буквально прямо под капотом), эти элементы могут быть оболочками, могут быть невидимыми или интегрированными в <Button/>
. теперь представьте, что нажатие одной и той же кнопки каждый раз ведет себя по-разному только потому, что несколько раз вы нажимали невидимый span
внутри Button
а иногда и сам Button
, что для конечно, не является последовательным или желательным.
Итак, к вашей точке, imo, цель события всегда должна быть установлена на кнопку, когда был нажат элемент Button
(субкомпоненты и элементы должны быть сквозными)
@ mim-Armand Понял. IMO, может быть лучше предоставить экземпляр Button
в качестве аргумента в обратном вызове, если вы хотите предложить согласованность на уровне компонентов. Если аргумент является экземпляром Event
(или, точнее, React.SyntheticEvent
), я предполагаю, что его цель - реальная цель события, которая обеспечивает согласованность на уровне домена.
В качестве примечания: вы всегда можете сослаться на button
с помощью event.currentTarget
.
Самый полезный комментарий
@ mim-Armand Понял. IMO, может быть лучше предоставить экземпляр
Button
в качестве аргумента в обратном вызове, если вы хотите предложить согласованность на уровне компонентов. Если аргумент является экземпляромEvent
(или, точнее,React.SyntheticEvent
), я предполагаю, что его цель - реальная цель события, которая обеспечивает согласованность на уровне домена.В качестве примечания: вы всегда можете сослаться на
button
с помощьюevent.currentTarget
.