react-原生事件和合成事件的区别

本文探讨了React中的合成事件与原生事件的主要区别,包括合成事件的目的,如封装事件以实现跨平台兼容和统一事件命名。在阻止冒泡的方式上,原生事件可通过返回false,而合成事件在React v0.14以前的版本需特殊处理。对于事件处理函数中的event,合成事件不能在异步函数中访问,但原生事件没有此限制。源码分析部分聚焦于React的SyntheticEvent,讨论了其在事件池中的行为。
摘要由CSDN通过智能技术生成

react-原生事件和合成事件的区别及源码分析

概念

class EventClickDemo extends React.Component {
	constructor(props) {
		super(props)
		this.btnRef = React.createRef()
	}
	componentDidMount() {
		// 这里就是js原生事件
		this.btnRef.current.addEventListener('click', function(e) {
			console.log('native event')
			console.log(e)
		})
	}
	handleClick(event) {
		// 这里就是合成事件,指的是react封装的SyntheticEvent
		console.log('react event')
		console.log(event)
	}
	render() {
		return (
			<div onClick={this.handleClick} ref={this.btnRef}>Click me</div>
		)
	}
}

关于 react 合成事件

目的:

  1. 封装事件,实现跨平台,把差异封装在底层
  2. 将事件全部统一冒泡到 document 再进行触发
  3. 可以统一命名,这样子命名符合 react 编程习惯,比如点击事件 onClick,点击事件(捕获阶段)onClickCapture

api:

boolean bubbles // 是否冒泡
boolean cancelable // 是否可以取消
DOMEventTarget currentTarget
boolean defaultPrevented
number eventPhase
boolean isTrusted
DOMEvent nativeEvent // 相当于原生事件的event
void preventDefault() // 封装的阻止默认行为
boolean isDefaultPrevented()
void stopPropagation() // 阻止冒泡
boolean isPropagationStopped() // 是否设置了阻止冒泡
void persist()
DOMEventTarget targe
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值