React合成事件一套机制:React并不是将click事件直接绑定在dom上面,而是采用事件冒泡的形式冒泡到document上面,然后React将事件封装给正式的函数处理运行和处理。
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> ) } } 复制代码
有时表现出异步,有时表现出同步