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