React合成事件是React模拟原生DOM事件所有能力的一个事件对象。根据 W3C规范来定义合成事件,兼容所有浏览器,拥有与浏览器原声事件相同的接口。合成事件除了拥有和浏览器原生事件相同的接口,包括stopPropagetion()和preventDefault()。
在React中,所有事件都是合成的,不是原生DOM事件,可以通过 event.nativeEvent 属性获取原生DOM事件。合成事件不会映射到原生事件。
浏览器兼容,实现更好的跨平台
💕为什么出现这个技术?
import React, { Component } from 'react';
class App extends Component {
fn = (event)=>{console.log("fn",event);}
fn1 = (msg)=>(event)=>{
console.log("fn1",msg,event);
}
fn2 = (msg,event)=>{
console.log(msg,event);
}
render() {
return (
<div>
<button onClick={this.fn}>+++</button>
<button onClick={this.fn1("第二种")}>+++</button>
<button onClick={(event)=>this.fn2("第三种",event)}>+++</button>
</div>
);
}
}
export default App;

前一篇文章就说过,在react类组件中使用function成员属性,会找不见当前的this.
在react事件绑定的类组件中,默认情况this指向会可能存在指向问题 undefined
如果你写的此方案 方法名() 方案,用到 bind来绑定
addNum() {
console.log(this.num++);
}
constructor(props) {
super(props);
this.addNum = this.addNum.bind(this)
}
<div>
<button onClick={this.addNum}>++</button>
<button onClick={this.addNum.bind(this,2)}>++</button>
</div>
并且可以任意传入参数
两种写法,一种写在视图层,一种写在控制层
import React, { Component } from 'react';
class App extends Component {
num=100;
addNum(evt){
this.num++;
this.forceUpdate();
}
addNum=(msg)=>(evt){
this.num++;
this.forceUpdate();
}
render() {
return (
<div>
<div><h1>{this.num}</h1></div>
<div>
<button onClick={(evt)=>this.addNum(evt,2)}>++</button>
<button onClick={this.addNum(2)}>++</button>
</div>
</div>
);
}
}
export default App;