- 事件系统
- 合成事件
- 事件池
- 支持的事件
- 剪贴板事件
- Composition 事件
- 键盘事件
- 焦点事件
- 表单事件
- 鼠标事件
- Selection Events
- 触控事件
- 用户界面事件
- 滚轮事件
- Media Events
- Image Events
事件系统
合成事件
事件处理程序通过 合成事件(SyntheticEvent)的实例传递,SyntheticEvent 是浏览器原生事件跨浏览器的封装。SyntheticEvent 和浏览器原生事件一样有 stopPropagation()、preventDefault() 接口,而且这些接口夸浏览器兼容。
如果出于某些原因想使用浏览器原生事件,可以使用 nativeEvent 属性获取。每个和成事件(SyntheticEvent)对象都有以下属性:
boolean bubblesboolean cancelableDOMEventTarget currentTargetboolean defaultPreventednumber eventPhaseboolean isTrustedDOMEvent nativeEventvoid preventDefault()boolean isDefaultPrevented()void stopPropagation()boolean isPropagationStopped()DOMEventTarget targetnumber timeStampstring type
注意:
React v0.14 中,事件处理程序返回
false不再停止事件传播,取而代之,应该根据需要手动触发e.stopPropagation()或e.preventDefault()。
事件池
SyntheticEvent 是池化的. 这意味着 SyntheticEvent 对象将会被重用并且所有的属性都会在事件回调被调用后被 nullified.
这是因为性能的原因.
因此,你不能异步的访问事件.
function onClick(event) {console.log(event); // => nullified object.console.log(event.type); // => "click"var eventType = event.type; // => "click"setTimeout(function() {console.log(event.type); // => nullconsole.log(eventType); // => "click"}, 0);this.setState({clickEvent: event}); // Won't work. this.state.clickEvent will only contain null values.this.setState({eventType: event.type}); // You can still export event properties.}
注意:
如果你想异步访问事件属性,你应该在事件上调用
event.persist(),这会从池中移除合成事件并允许对事件的引用被用会保留.
支持的事件
React 将事件统一化,使事件在不同浏览器上有一致的属性.
下面的事件处理程序在事件冒泡阶段被触发。如果要注册事件捕获处理程序,应该使用 Capture 事件,例如使用 onClickCapture 处理点击事件的捕获阶段,而不是 onClick。
剪贴板事件
事件名称:
onCopy onCut onPaste
属性:
DOMDataTransfer clipboardData
Composition 事件
事件名称:
onCompositionEnd onCompositionStart onCompositionUpdate
属性:
string data
键盘事件
事件名称:
onKeyDown onKeyPress onKeyUp
属性:
boolean altKeynumber charCodeboolean ctrlKeyboolean getModifierState(key)string keynumber keyCodestring localenumber locationboolean metaKeyboolean repeatboolean shiftKeynumber which
焦点事件
事件名称
onFocus onBlur
属性:
DOMEventTarget relatedTarget
焦点事件在所有的React DOM上工作,不仅仅是表单元素.
表单事件
事件名称:
onChange onInput onSubmit
关于 onChange 事件的更多信息,参见 表单组件。
鼠标事件
事件名称:
onClick onContextMenu onDoubleClick onDrag onDragEnd onDragEnter onDragExitonDragLeave onDragOver onDragStart onDrop onMouseDown onMouseEnter onMouseLeaveonMouseMove onMouseOut onMouseOver onMouseUp
onMouseEnter 和 onMouseLeave 事件从离开的元素传播到进入的元素,代替冒泡排序并且没有捕获阶段.
属性:
boolean altKeynumber buttonnumber buttonsnumber clientXnumber clientYboolean ctrlKeyboolean getModifierState(key)boolean metaKeynumber pageXnumber pageYDOMEventTarget relatedTargetnumber screenXnumber screenYboolean shiftKey
Selection Events
事件名称:
onSelect
触控事件
事件名称:
onTouchCancel onTouchEnd onTouchMove onTouchStart
属性:
boolean altKeyDOMTouchList changedTouchesboolean ctrlKeyboolean getModifierState(key)boolean metaKeyboolean shiftKeyDOMTouchList targetTouchesDOMTouchList touches
用户界面事件
事件名称:
onScroll
属性:
number detailDOMAbstractView view
滚轮事件
事件名称:
onWheel
属性:
number deltaModenumber deltaXnumber deltaYnumber deltaZ
Media Events
事件名称:
onAbort onCanPlay onCanPlayThrough onDurationChange onEmptied onEncrypted onEnded onError onLoadedData onLoadedMetadata onLoadStart onPause onPlay onPlaying onProgress onRateChange onSeeked onSeeking onStalled onSuspend onTimeUpdate onVolumeChange onWaiting
Image Events
事件名称:
onLoad onError
