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