- bind this
- 关于 event 参数
- 传递自定义参数
constructor() {
this.clickHandler = this.clickHandler.bind(this)
}
render() {
return <p onClick={this.clickHandler}>{this.state.name}</p>
}
clickHandler() {
this.setState({ // this默认是undefined
name: 'list'
})
}
clickHandler2 = () => {
this.setState({ // 静态方法,this指向当前实例
name: 'list'
})
}
clickHandler3(event) {
event.preventDefault(); // 阻止默认行为
event.stopPropagation(); // 阻止冒牌
/*
这里 event 不是原生的,这个的 __proto__.constructor 指向的是一个框架合成的 SyntheticEvent,这个模拟了 dom 事件的所有能力
而 vue 的 event 是原生的 MouseEvent
在 react 中 event.nativeEvent 则是原生的那个
event.nativeEvent.target 指向的是鼠标点击的那个元素
event.nativeEvent.currentTarget 绑定事件的元素则指向了 #document
!!!React17开始,事件就不再绑定到 document 上了
*/
}
clickHandler4(arg1, arg2, event) {
// 最后追加的一个参数 是event
}
- React16 事件绑定到 document
- React17 事件绑定到 root组件上
- 17这样做有利于多个React版本并存,例如微前端