React合成事件一套机制:React并非将click事件直接绑定在dom上面,而是采用事件冒泡的形式冒泡到document上面,而后React将事件封装给正式的函数处理运行和处理。javascript
React合成事件理解 若是DOM上绑定了过多的事件处理函数,整个页面响应以及内存占用可能都会受到影响。React为了不这类DOM事件滥用,同时屏蔽底层不一样浏览器之间的事件系统差别,实现了一个中间层——SyntheticEvent。前端
class App extends React.Component{
constructor(props){
super(props);
this.state={
num:1
}
}
componentDidMount(){
this.clickFunc();
}
addNum(e){
console.log('react合成事件');
this.setState({num:this.state.num+1});
console.log(this.state.num);
// react合成事件
// 1
}
//原生事件与setTimeout中不会进行批量更新
clickFunc(){
document.querySelector('#btn').addEventListener('click',()=>{
console.log('原生事件');
this.setState({num:this.state.num+1});
console.log(this.state.num);
this.setState({num:this.state.num+1});
console.log(this.state.num);
this.setState({num:this.state.num+1});
console.log(this.state.num);
// 原生事件
// 2, 3, 4
})
}
render(){
return(
<div> <h1>{this.state.num}</h1> {/* react的合成事件 */} <button onClick={(e)=>{this.addNum(e)}}>React合成事件的按钮</button> {/* 原生DOM事件 */} <button id='btn'>绑定原生DOM事件的按钮</button> </div>
)
}
}
复制代码
有时表现出异步,有时表现出同步java