尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

事件在react中的处理方式?

事件在react中的处理方式?
📅 发布时间:2026/6/19 0:25:13

一、React 事件的本质

在 React 中,事件不是原生的 DOM 事件,而是 合成事件(SyntheticEvent)。

React 自己实现了一套跨浏览器的事件系统,用于封装原生事件,让你在所有浏览器中都能一致地使用。

也就是说:

<button onClick={handleClick}>点击</button>

这里的 onClick 并不是直接绑定在 DOM 上的,而是 React 统一注册的。

二、React 事件的绑定方式

在 JSX 中以驼峰命名方式绑定

React 事件属性用 小写 on + 大写首字母事件名 的形式,例如:

  • onClick

  • onChange

  • onMouseEnter

  • onSubmit

示例:
function App() {function handleClick() {console.log("按钮被点击");}return <button onClick={handleClick}>点我</button>;
}

注意:不能写成 onclick="handleClick()"(那是 HTML 写法)

传参的写法

当你要给事件传参时,需要用箭头函数包一下:

<button onClick={() => handleClick(id)}>删除</button>

或者绑定时:

<button onClick={handleClick.bind(this, id)}>删除</button>

类组件中的事件

在类组件中,你可以这样写:

class App extends React.Component {handleClick = (event) => {console.log('点击事件', event);};render() {return <button onClick={this.handleClick}>点我</button>;}
}

箭头函数写法可以自动绑定 this,不然要在构造函数中 this.handleClick = this.handleClick.bind(this)。

React 合成事件对象(SyntheticEvent)

React 事件的回调会接收一个合成事件对象:

function handleClick(e) {console.log(e); // SyntheticEventconsole.log(e.nativeEvent); // 原生事件
}

特点:

  • 兼容所有浏览器;

  • 在事件池中复用(异步中要先调用 e.persist() 保留事件);

示例:

function handleClick(e) {e.preventDefault(); // 阻止默认行为e.stopPropagation(); // 阻止冒泡
}

事件冒泡与捕获

React 的事件默认是冒泡阶段触发的。

如果要监听捕获阶段,加上 Capture:

<div onClickCapture={handleCapture}><button onClick={handleBubble}>点我</button>
</div>

执行顺序:

  1. 捕获阶段:父的 onClickCapture

  2. 冒泡阶段:子的 onClick

  3. 冒泡阶段:父的 onClick

React 事件与原生事件的区别总结

对比项 React事件 原生DOM事件
注册方式 JSX属性(onClick) addEventListener
事件名 驼峰命名 小写
对象类型 SyntheticEvent Event
绑定位置 统一代理到 root(React 18是 root container) 绑定到具体元素
跨浏览器兼容 ✅ ❌
阻止默认行为 e.preventDefault() event.preventDefault()

React 18 的变化

React 18 开始,事件代理不再统一绑定到 document,而是绑定到 React 根节点(root)。
这样多个 React 应用可以共存,互不影响。

常见事件示例

<input onChange={(e) => console.log(e.target.value)} />
<form onSubmit={(e) => e.preventDefault()} />
<div onMouseEnter={() => console.log('鼠标进入')} />

相关新闻

  • 农经权报表生成小程序介绍
  • Linux 中检测gz压缩文件是否损坏
  • 2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销

最新新闻

  • 大连家电维修平台推荐:本地用户实测较好的几家服务商深度对比——2026年6月最新发布 - 一步到家
  • 3步解锁老旧Mac新生命:OpenCore Legacy Patcher终极升级指南
  • 2026宜昌非急救转运救护车TOP5盘点|宜荆荆同城、长江跨江、三峡山地、院区转诊首选康跃转运 - 吉修匠
  • 2026年湖北百合种植基地推荐排行榜:百合技术/百合回收/百合种苗案例参考 - 新闻快传
  • 告别龟速与超时:全方位解决 git clone 网络难题的实战指南
  • 嵌入式MCU电气特性与FLASH操作深度解析:从数据手册到稳定设计

日新闻

  • 5分钟掌握Python进化算法:Geatpy高性能优化工具完全指南
  • Microchip 24AA044 EEPROM选型与应用全指南:从参数解析到实战编程
  • 华为的鸿蒙到底有多牛?为什么称作遥遥领先?

周新闻

  • 3步解锁iOS设备:applera1n激活锁绕过完全指南
  • 39 2026 人工智能证书终极盘点,普通人选 AI 证书可以从这些方向入手
  • Redis 暴露公网有多危险?从端口检查到补救步骤

月新闻

  • 【总结】入门篇:50句话让你记住架构核心概念
  • WeChatMsg技术方案解析:实现Mac微信数据自主管理的完整解决方案
  • WeChatMsg:革新性微信数据备份方案,打造你的专属数字记忆库

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号