6、事件
最后更新于:2022-04-02 06:08:32
React在原生事件的基础上,重新设计了一套跨浏览器的合成事件(SyntheticEvent),在事件传播、注册方式、事件对象等多个方面都做了特别的处理。
## 一、注册事件
合成事件采用声明式的注册方式,类似于设置HTML属性,但有两点不同:
(1)事件要采用小驼峰的命名法,而不是全部小写,例如onclick要写成onClick。
(2)在JSX中的事件处理程序是一个函数引用,而不是一段字符串,如下代码所示,其中handle()是一个函数。
~~~html
~~~
两个元素都注册了点击事件,其中前者采用了传统的事件注册,后者使用了合成事件,通过对比可发现它们之间有两处明显的不同。
React的事件类型是原生事件类型的一个子集,在上面的示例中,为按钮添加了Mouse类型的onClick事件。除了常规的Focus、Form、Touch等类型之外,React还支持Selection、Wheel、Media等有特殊功能的事件类型。
## 二、事件传播
React中的事件最终都会转换成原生事件,但不会注册到某个真实的DOM元素,而是绑定到根元素,使用事件委托技术进行事件代理,再由一个总的事件监听器管理所有的事件处理程序。
React中的事件传播只有冒泡这一种形式,而冒泡会先在DOM树中向上传播,一直到根元素,然后再从JSX中触发的React元素开始向它的父元素传播,依次执行绑定的事件处理程序。在下面的示例中,分别为页面中的根元素和\元素,以及组件中的\
元素和\