合成事件与原生事件 区别:
1. 命名不一样,原生用纯小写方式,react用小驼峰的方式
原生:onclick React的:onClick
2. 事件处理函数的写法不一样
原生的是传入一个字符串,react写法传入一个回调函数
3. 阻止默认行为方式不同
原生:return false, react中的:event.preventDefault()
javascriptclass Toggle extends React.Component { constructor(props) super(props) this.state={ isToggleOn: true } // 为了在回调中使用this, 这个绑定是必不可少的 this.handleClick = this.handleClick.bind(this) handleClick(){ this.setState((prevState) => ({ isToggleOn: !prevState.isToggleOn })) } render(){ return ( // class的方法默认不会绑定this。如果没有绑定this.handleClick.bind(this) 并把它传入 onClick,this的值为undefined <Button onClick={this.handleClick}> // 2. 传入一个回调函数 {this.state.isToggleOn ? 'ON' : 'OFF'} </Button> // 1. onClick小驼峰写法 ) } }【 拓展:为什么需要绑定this 】
button按钮编译的过程:React.createElement()
javascript// 伪代码 // 证明为什么绑定this function creteElement (dom, params) { var domObj = document.createElement(dom) domObj.onClick = params.onClick // 后面的onClick(当前的onClick函数)赋值给前面的onClick, 这时,onClick执行的作用域是外层作用域。所以return出去的值找不到this.handleClick。[所以需要绑定this指定到当前的作用域] domObj.innerHTML = params.content return domObj } React.creteElement('button', { onClick: this.handleClick }, this.state.isToggleOn ? 'ON' : 'OFF')如果不想绑定this的写法:
javascriptclass Toggle extends React.Component { constructor(props) super(props) this.state={ isToggleOn: true } // 法1:bind绑定:为了在回调中使用this, 这个绑定是必不可少的 // this.handleClick = this.handleClick.bind(this) handleClick = () => { // 法2:写成箭头函数,箭头函数没有作用域的 this.setState((prevState) => ({ isToggleOn: !prevState.isToggleOn })) } render(){ return ( // class的方法默认不会绑定this。如果没有绑定this.handleClick.bind(this) 并把它传入 onClick,this的值为undefined <Button onClick={() => this.handleClick()}> // 2. 传入一个回调函数 法3 {this.state.isToggleOn ? 'ON' : 'OFF'} </Button> // 1. onClick小驼峰写法 ) } }. 为何React要用合成事件机制
进行浏览器兼容、跨平台、事件代理(移动端和pc端的一些原生事件不一定完全兼容的)
挂载到documnet,减少内存消耗,避免频繁绑定和解绑事件,也方便事件统一管理
避免垃圾回收、react事件池
React中的合成事件
outstanding木槿2025-01-06 10:19
相关推荐
前端大波14 分钟前
Sentry 每日错误巡检自动化:设计思路与上手实战Highcharts.js1 小时前
适合报表系统的可视化图表|Highcharts支持直接导出PNG和PDFZC跨境爬虫1 小时前
使用Claude Code开发校园交友平台前端UI全记录(含架构、坑点、登录逻辑及算法)慧一居士1 小时前
Vue项目中,何时使用布局、子组件嵌套、插槽 对应的使用场景,和完整的使用示例叫我一声阿雷吧2 小时前
JS 入门通关手册(35):执行上下文、调用栈与作用域链深度解析Можно2 小时前
uni.request 和 axios 的区别?前端请求库全面对比M ? A2 小时前
解决 VuReact 中 ESLint 规则冲突的完整指南Jave21083 小时前
实现全局自定义loading指令奔跑的呱呱牛3 小时前
CSS Grid 布局参数详解(超细化版)+ 中文注释 Demo木斯佳3 小时前
前端八股文面经大全:影刀AI前端一面(2026-04-01)·面经深度解析