class EventDemo extends React.Component { constructor(props) { super(props) this.state = { name: 'zhangsan', } } render() { return ( <a href="https://imooc.com/" onClick={this.clickHandler3}> click me </a> ) } // 如果该事件触发的函数不传参,则会默认传递一个event对象参数 clickHandler3 = (event) => { event.preventDefault() // 阻止默认行为 event.stopPropagation() // 阻止冒泡 console.log('target', event.target) // target指向触发事件的元素 console.log('current target', event.currentTarget) // currentTarget指向绑定事件的元素 // !!!注意,event其实是React封装的事件对象,是一个SyntheticEvent组合事件对象。 // 可以看 __proto__.constructor 是 SyntheticEvent 组合事件 console.log('event', event) // 不是原生的 Event ,原生的 MouseEvent console.log('event.__proto__.constructor', event.__proto__.constructor) // 原生 event 如下。其 __proto__.constructor 是 MouseEvent console.log('nativeEvent', event.nativeEvent) console.log('nativeEvent target', event.nativeEvent.target) // 指向当前元素,即当前元素触发 console.log('nativeEvent current target', event.nativeEvent.currentTarget) // 指向 document !!! // 1. event 是 SyntheticEvent ,模拟出来 DOM 事件所有能力 // 2. event.nativeEvent 是原生事件对象 // 3. 所有的事件,都被挂载到 document 上 // 4. 和 DOM 事件不一样,和 Vue 事件也不一样 } // 如果该事件触发的函数传参,event则是最后一个传递的参数 clickHandler4(id, title, event) { console.log(id, title) console.log('event', event) // 最后追加一个参数,即可接收 event }}export default EventDemo