当前位置: 首页 > news >正文

事件在react中的处理方式?

一、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('鼠标进入')} />
http://www.rkmt.cn/news/22804.html

相关文章:

  • 农经权报表生成小程序介绍
  • Linux 中检测gz压缩文件是否损坏
  • 2025年信息流代运营服务商权威推荐榜:专业投放策略与高转化效果深度解析,助力企业精准营销
  • 权限维持-Windows权限维持
  • 1017
  • 2025 广州人力资源/派遣/外包/劳务外包/人事代理/推荐榜:精典人才创新 5 星领跑,适配招聘 / 测评 / 培训全场景企业需求
  • 2025 年选矿行业 2 号油厂家最新推荐排行榜:环保型 / 新型 / JQ202/101/QX/BK201/323 起泡剂等产品权威筛选,助力企业选对优质供应商
  • 2025 年探伤仪厂商最新推荐榜单:涡流 / 超声波 / 管材 / 焊缝 / 无损探伤仪优质企业权威盘点
  • 2025 年罗茨风机厂家最新推荐排行榜权威发布!深度解析各品牌优势助企业精准选型UNTW无泄漏/BRW水冷式罗茨风机厂家推荐
  • 【树莓派】安装PostgreSQL
  • 【数据结构】数据结构秘籍:如何衡量“查找”的快慢?ASL是关键! - 教程
  • 压缩 PDF 文件大小(3 大实用的 Python 库) - E
  • 请输入标题
  • 2、docker入门基本概念 - 实践
  • 国产项目管理工具Gitee的崛起:数字化转型浪潮下的本土化突围
  • 2025年精密磨床/CNC机械加工厂家推荐榜单:涵盖铣床/车床/磨削/多轴/复合加工,铝/不锈钢/钛合金/模具钢/塑料件定制,汽车/医疗/航空航天/机器人零件及模具工装夹具加工
  • 开发日志
  • Gitee 2025:中国开发者生态的崛起与本土化优势
  • JavaBean知识总结及范例
  • 2025 年家装管道生产厂家最新推荐排行榜:覆盖云南昆明贵州贵阳四川成都重庆,精选优质 PPR/PVC 管道品牌,解决选购难题
  • 强合规行业DevOps选型:告别工具拼凑,找到真正适配的国产化DevOps方案
  • 大疆无人机RTMP推流至LiveNVR实现web页面实时播放与录像回放,并可以转GB28181协议级联推送给上级监控视频管理平台
  • 2025 年最新金相厂家最新推荐排行榜:涵盖金相磨抛机 / 切割机 / 显微镜 / 抛光机 / 预磨机设备,助力企业精准选择优质品牌
  • maven的概述以及在mac安装部署
  • Python 列表切片赋值教程:掌握 “移花接木” 式列表修改技巧
  • 供应商图纸协同是什么?主要有哪几个核心原则?
  • 「Java EE开发指南」用MyEclipse开发的EJB开发工具(二)
  • TResult Funcin T, out TResult的应用
  • 深入解析:Redis List 类型全解析
  • 汇川伺服常用参