简述原生事件和React事件的区别 ?
原生事件和 React 事件在几个方面有所区别:
- 事件注册的方式:原生事件是直接绑定在 DOM 元素上的,如
element.addEventListener('click', handleClick)
;而 React 事件则是通过特殊的 JSX 属性语法绑定的,如<div onClick={handleClick}>Click me</div>
。 - 事件对象:原生事件处理函数接收的是原生的
Event
对象,这个对象的属性和方法取决于浏览器的实现;而 React 事件处理函数接收的是封装后的SyntheticEvent
对象,这个对象的接口和原生的Event
对象相同,但已经被规范化,以消除了各个浏览器之间的差异。 - 事件冒泡和捕获:原生事件和 React 事件都支持事件冒泡,但 React 事件不支持事件捕获。也就是说,如果你在 React 中使用
onClickCapture
,React 会在控制台中输出警告,告诉你这个属性无效。 - 事件委托:原生事件默认不使用事件委托,也就是说,我们需要为每一个元素和每一个事件类型单独注册事件处理函数。但 React 事件则默认使用事件委托,所有的事件处理函数都被注册到了文档的根元素上。这样做的好处是减少了内存占用,并且可以自动处理组件的挂载和卸载。
- 性能:由于 React 事件的事件委托和事件对象的重用,React 事件系统的性能通常比原生事件更好。