1. class EventDemo extends React.Component {
    2. constructor(props) {
    3. super(props)
    4. this.state = {
    5. name: 'zhangsan',
    6. }
    7. }
    8. render() {
    9. return (
    10. <a href="https://imooc.com/" onClick={this.clickHandler3}>
    11. click me
    12. </a>
    13. )
    14. }
    15. // 如果该事件触发的函数不传参,则会默认传递一个event对象参数
    16. clickHandler3 = (event) => {
    17. event.preventDefault() // 阻止默认行为
    18. event.stopPropagation() // 阻止冒泡
    19. console.log('target', event.target) // target指向触发事件的元素
    20. console.log('current target', event.currentTarget) // currentTarget指向绑定事件的元素
    21. // !!!注意,event其实是React封装的事件对象,是一个SyntheticEvent组合事件对象。
    22. // 可以看 __proto__.constructor 是 SyntheticEvent 组合事件
    23. console.log('event', event) // 不是原生的 Event ,原生的 MouseEvent
    24. console.log('event.__proto__.constructor', event.__proto__.constructor)
    25. // 原生 event 如下。其 __proto__.constructor 是 MouseEvent
    26. console.log('nativeEvent', event.nativeEvent)
    27. console.log('nativeEvent target', event.nativeEvent.target) // 指向当前元素,即当前元素触发
    28. console.log('nativeEvent current target', event.nativeEvent.currentTarget) // 指向 document !!!
    29. // 1. event 是 SyntheticEvent ,模拟出来 DOM 事件所有能力
    30. // 2. event.nativeEvent 是原生事件对象
    31. // 3. 所有的事件,都被挂载到 document 上
    32. // 4. 和 DOM 事件不一样,和 Vue 事件也不一样
    33. }
    34. // 如果该事件触发的函数传参,event则是最后一个传递的参数
    35. clickHandler4(id, title, event) {
    36. console.log(id, title)
    37. console.log('event', event) // 最后追加一个参数,即可接收 event
    38. }
    39. }
    40. export default EventDemo