2.12.3
MAC, Chrome 61,
https://codepen.io/anon/pen/EvKmNO?editors=001
Bitte sehen Sie sich die Konsole an, um das Verhalten im Codepen-Beispiel zu überprüfen, während Sie auf die Elemente \ , \ und \ klicken
Ich denke, es ist ein Fehler... Könnten Sie uns einen PR geben, um das Problem zu beheben?
Klar, ich werde diese Woche versuchen, eine PR zu machen :+1:
@benjycui Ich verstehe nicht ganz, warum das Ereignisziel immer auf das Schaltflächenelement gesetzt werden sollte. Das Ziel eines Ereignisses sollte das Element sein, von dem das Ereignis stammt.
@jddxf genau, wenn Sie auf ein <Button/>
klicken, erwarten Sie, dass es als Ziel übergeben wird, unabhängig davon, auf welchen Teil des <Button/>
Sie klicken. (das ist das ganze Versprechen von Modulen und Komponenten, einer Reihe von Eingängen und einer Reihe von konsistenten Ausgängen)
Jetzt kann die Button-Komponente ein <span/>
oder ein anderes Element unter der Haube haben (was nicht einmal verwendbar ist, da niemand weiß, dass es da ist, es ist buchstäblich direkt unter der Haube), diese Elemente können Wrapper sein, können unsichtbar oder integriert sein im <Button/>
. Stellen Sie sich nun vor, dass sich das Klicken auf denselben Button jedes Mal anders verhält, nur weil Sie manchmal auf das unsichtbare span
innerhalb des Button
und manchmal auf das Button
selbst geklickt haben, das ist sicher ist nicht konsistent oder erwünscht.
Also zu Ihrem Punkt, imo sollte das Ereignisziel immer auf die Schaltfläche gesetzt werden, wenn auf das Button
Element geklickt wurde (Unterkomponenten und Elemente sollten durchklickbar sein)
@mim-Armand Verstanden. IMO, es ist möglicherweise besser, eine Button
Instanz als Argument im Rückruf bereitzustellen, wenn Sie Konsistenz auf Komponentenebene bieten möchten. Wenn das Argument eine Event
(oder genauer React.SyntheticEvent
) -Instanz ist, nehme ich an, dass ihr Ziel das eigentliche Ereignisziel ist, das Konsistenz auf Dom-Ebene bietet.
Als Randnotiz können Sie sich immer auf button
mit event.currentTarget
beziehen.
Hilfreichster Kommentar
@mim-Armand Verstanden. IMO, es ist möglicherweise besser, eine
Button
Instanz als Argument im Rückruf bereitzustellen, wenn Sie Konsistenz auf Komponentenebene bieten möchten. Wenn das Argument eineEvent
(oder genauerReact.SyntheticEvent
) -Instanz ist, nehme ich an, dass ihr Ziel das eigentliche Ereignisziel ist, das Konsistenz auf Dom-Ebene bietet.Als Randnotiz können Sie sich immer auf
button
mitevent.currentTarget
beziehen.