React事件处理、事件的特点、事件语法、React事件处理函数里的this、事件对象、阻止浏览器的默认行为

2023-10-26

React事件的特点:

1、React 事件绑定属性的命名采用驼峰式写法,而不是小写。如:onClick。

2、如果采用 JSX 的语法你需要传入一个函数作为事件处理函数,而不是一个字符串(DOM 元素的写法),函数不写小圆括号

3、在 React 中另一个不同是你不能使用return false 的方式阻止默认行为, 你必须明确的使用 preventDefault。

4、事件处理函数里的this是undefined(啊………),如果希望事件处理函数里的this是React组件对象本身,则需要用bind。

事件语法

1、格式

<JSX元素 onClick={this.实例方法|函数体} />

示例:

class Home extends React.Component{
    
fn01() {
  console.log("fn01");
}
    
render(){
  return (
   <div>
     <input type="button" value="测试01" onClick={this.fn01} />
//函数体
     <input type="button" value="测试02" onClick={()=>{console.log("事件绑定箭头函数")}} />
    </div>
  )
}
}

2、事件处理函数里的this

事件处理函数里的this是undefined,如何让事件处理函数里的this是React组件对象本身

一、使用bind
1)、构造器(构造函数)里:this.方法=this.方法.bind(this)  bind改变this指向,FN与THIS,产生新的函数[this.方法.bind(this)],只要调用新的函数,this就是该对象,(右边赋值给左边,左边习惯写的与右边的同名)、执行性能高
2)、在事件绑定时写,onClick={this.方法.bind(this)}执行性能低

二、使用箭头函数
3)、事件绑定时,使用箭头函数:onClick={()=>this.方法()}执行性能高
4)、定义方法时,直接使用箭头函数: 方法=()=>{箭头函数定义方法}  执行性能低

构造函数执行性能高,因为另一种每次调用render时都要产生新的函数

如:

class MyPerson extends React.Component{
	constructor(props){
		super(props);
		this.state={
			age:12,
			isAdult:"未成年"
		}
		this.changeAge = this.changeAge.bind(this);
	}

	changeAge(){
		………………………………
	}
	//直接使用箭头函数
	changeAge=()=>{
		this指向会找上一级
	}

	render(){
		return (
			<div>
				<input type="button" value="修改年龄" onClick={this.changeAge} />
				<input type="button" value="修改年龄" onClick={()=>{this.changeAge()}} />
				<input type="button" value="修改年龄" onClick={this.changeAge} />
				<p>年龄:{this.state.age}</p>
				<p>年龄:{this.state.isAdult}</p>
			</div>
		);
	}
}

3、事件对象**

event对象是经过react处理过的。

如何获取事件对象------直接声明即可。

实例方法(ev) ev 代理事件对象 ,ev.target 返回真实DOM

事件对象的获取:

1)、直接声明(没有其它参数的情况下)

changeAge1=(ev)=>{
    console.log(ev);
    console.log(ev.target);
}

<input type="button" value="修改年龄2" onClick={(ev)=>this.changeAge1(ev)} />
<input type="button" value="修改年龄2" onClick={this.changeAge1} />

2)、箭头函数里直接声明(有其它参数的情况下)

changeAge2(ev,num){
    console.log(ev);
    console.log(ev.target);
    console.log(num);
}
//注意:给onClick绑定的函数,还是只有一个参数,这个参数就是事件对象,此处在绑定的函数里再调用另外一个函数进行传参
<input type="button" value="修改年龄2" onClick={(ev)=>this.changeAge2(ev,2)} />

注意:给事件属性绑定的函数,永远只会有一个参数,该参数就是事件对象。

4、阻止浏览器的默认行为:

​ 只能用preventDefault,不能在事件函数里使用return false

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React事件处理、事件的特点、事件语法、React事件处理函数里的this、事件对象、阻止浏览器的默认行为 的相关文章

  • 使用 redux-persist 保存和检索状态 - React Native

    我是反应原生的新手 我第一次尝试保存我的应用程序的状态 为了实现这一目标 我建议使用还原 持久化 https github com rt2zz redux persist blob master docs recipes md 我希望在网络
  • Graphql 字段在类型上不存在

    浏览完 Graphql 的文档后 我开始在一个玩具 Rails reactJS 项目上实现它 这些项目允许用户通过设备登录 然后访问显示艺术家列表的虚拟 艺术家路径 一切似乎都工作正常 直到我尝试使用 React 应用程序中的 GraphQ
  • 如何将基于Reactjs的PWA更新到新版本?

    我正在开发一个基于reactjs 的应用程序 我也做了service worker对其进行设置 后add to home screen 应用程序从不检查服务器是否有新更新 我也尝试过 window location reload true
  • React / JSX 动态组件名称

    我正在尝试根据组件的类型动态渲染组件 例如 var type Example var ComponentName type Component return
  • 在react js中动态添加到body中的数据时滚动到页面底部?

    我有一个如下所示的组件 class App extends React Component constructor props super props render return div this state renderedThings
  • React:获取 contentEditable div 内文本的值

    我正在使用一个contentEditablediv 并希望在调用提交时获取其中的文本 我试过this refs textarea value trim 但这似乎不起作用 我的代码在渲染返回中如下 div div
  • 从 HashRouter 中删除 #

    我在用着react router dom对于我的路由 由于我也在使用 GitHub Pages 所以我需要使用HashRouter in my Router jsx like so import React from react impor
  • 使用 amplify ui React 配置状态时,AuthStatus 不会发生变化

    我正在使用 AWS amplify UI React 在 React 应用程序中创建身份验证流程 我按照该文档并使用下面的文档制作了导航流程 https ui docs amplify aws react guides auth prote
  • React useState,useEffect 中的 setState 不更新数组

    我在 SO 上看到过这个问题 但我似乎无法弄清楚它为什么存在 我正在关注来自的教程here https medium com swlh creating a simple real time chat with net core react
  • 如何使用 antd upload React 发送 multipart/form-data

    我正在使用 React 和 antd 我使用的 antd 组件是拖放 https ant design components upload 我正在尝试使用 FormData 对象发送多部分 表单数据 它发送文件 应作为 blob 发送的 z
  • 无法在 _app.js 中使用 getStaticProps

    我正在使用 next js 并尝试执行以下操作 获取 app js中与用户数据相关的基本数据 该数据包括标题 用于导航栏 和一些社交链接 用于页脚 在构建时将该数据传递给其他组件 例如页脚和导航栏 用于静态站点生成 为此我已经导出了getS
  • 如何在 Javascript 中从 Firefox 剪贴板获取内容

    我非常沮丧地在我的 React 应用程序上从剪贴板进行粘贴 I used navigator clipboard readText 在 Chrome 浏览器上完美运行 但它在我最新的 Firefox 浏览器上不起作用 我尝试搜索SO 但与之
  • 响应 django CORS 问题

    错误详情 单击按钮时生成了两个请求 到目前为止我搜索了什么 Axios 通过 Django REST Framework 被 CORS 策略阻止 https stackoverflow com questions 55366740 axio
  • 将反应路由器与反应门户一起使用?

    我正在实现一个带有大量表的应用程序 可以与react router完美配合 读取URL查询等 现在我需要将其中一个表放入模式中 我正在使用AntUI模态 https ant design components modal 用于此目的的组件
  • 生产构建中的 Create-React-App 代理

    我正在使用带有 Express 后端的 create react app 我的后端在端口 3001 上运行 前端在开发模式下通过端口 3000 运行 我有 proxy http localhost 3001 在我的 package json
  • 如何使用 ES6 样式导入添加外部 javascript 库?

    我无法准确理解如何在新的 ES6 项目中使用旧的 javascript 库 我正在查看一个使用 webpack 编译 使用 ES6 编写并使用 Babel 转译的 React 项目 每个组件都遵循import from 符号 我想在项目中使
  • Angular 6 HttpClient - CORS 问题

    我的 Nodejs Restful 服务有以下端点http localhost 3000 api countries http localhost 3000 api countries 我正在使用这个中间件https github com
  • react-native limit 列表项

    我在用Flatlist https facebook github io react native docs flatlist html来自反应本机和ListItem https react native training github i
  • 如何在没有 create-react-app 的情况下手动配置 React 的最小设置?

    我不想使用create react app 那么我该如何配置minimal一个简单的反应应用程序的工作开发环境 Note 我知道我可能会包含所有内容在运行时作为 JS https reactjs org docs add react to
  • React Router - 如何确定是否按下了后退按钮?

    我有这些场景 设置页面 gt 结果页面 gt 详细信息页面 用户选择设置 单击下一步 获取结果 然后单击查看更多详细信息 详情页 gt 结果页 用户从详细信息页面返回结果页面 这会导致完全重新渲染 导致我毫无意义地再次访问服务器 我将结果存

随机推荐

  • The illustrated Transformer 笔记

    The illustrated Transformer Transformer是一种使用Attention机制类提升模型训练的速度的模型 该模型的最大优势在于其并行性良好 Transformer模型在Attention is All You
  • IDEA 方法注释 自动获取返回值和传参

    一 设置 1 添加自定义注释快捷键 2 注释内容 desciption params return returns Author junwei Date date time 点击右边的edit variables 设置函数 下面3个内容选择
  • 前端面试题梳理

    一 技术方面 60 1 实现一个元素的水平垂直居中的几种方式 2 vue中 双向绑定的原理 3 vueX的原理 4 实现一个左边固定 右边自适应的布局 5 pomise的理解 6 对浏览器兼容的理解 如何兼容低版本浏览器 7 地址栏输入一个
  • UnityEditor.BuildPlayerWindow+BuildMethodException

    unity3D安卓打包报错 UnityEditor BuildPlayerWindow BuildMethodException 61 errors at UnityEditor BuildPlayerWindow DefaultBuild
  • hive 查询输入中文乱码

    设置 home 用户 profile 文件中LANG en US UTF 8即可
  • envi5.3处理高分二号影像数据详细过程记录

    目录 一 多光谱影像处理 1 辐射定标 2 大气校正 1 需要准备一些数据 2 大气校正过程 3 正射校正 二 全色影像处理 1 辐射定标 2 正射校正 三 图像融合 1 几何配准 2 图像融合 高分二号处理流程 envi5 3的安装教程
  • C3P0的详细配置说明(com.mchange.v2.c3p0.ComboPooledDataSource)

    C3P0是一个开放源代码的JDBC连接池 它在lib目录中与Hibernate一起发布 包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象 c3p0 config gt
  • 使用Pytorch进行多卡训练

    当一块GPU不够用时 我们就需要使用多卡进行并行训练 其中多卡并行可分为数据并行和模型并行 具体区别如下图所示 由于模型并行比较少用 这里只对数据并行进行记录 对于pytorch 有两种方式可以进行数据并行 数据并行 DataParalle
  • 数据库课程设计:图书信息管理系统(Java+MySQL)(附程序)

    期末数据库课程设计做了个图书信息管理系统 由于老师给的选题给得早 所以我在开学后的几周就开学搞了 删删改改整了好多 在此整理分享一下 项目简介 随着社会的发展 人们对知识的需求也在不断增长 书籍作为人们获取并增长知识的只要途径 使得书城 书
  • 如何通过远程桌面重启计算机?

    使用远程桌面连接远程计算机后 在开始菜单中只有 注销 和 关机 选项 无法直接重启现场终端 可以使用命令行重启现场终端 使用运行命令 Windows R键 输入命令行shutdown r t 0 Shutdown r t 5 关闭 重启 延
  • 看尚电视adb安装当贝桌面,并开机自启

    1 链接 可以电脑下奇兔刷机 实用工具里有adb 点开直接用 ADB 链接好后输入命令验证 c adb gt adb devices 如显示 192 168 5555 device字样表示链接成功 不同的adb前面几个字母也许不一样 2 开
  • 每个初级程序员都希望有一天能成为一名高级开发工程师。

    当程序员想要转向更高需求以及更高层次的角色时 他们的能力也必须随之提升 但也正因如此 很多人都会在这种转变中失败 程序员们通常认为 成为一名高级开发工程师必定要积累一定年限的经验以及十分擅长编程 虽然这些的确是必要因素 但想要成为一名高级开
  • 多线程创建的方式

    多线程的创建方式有以下几种 1 继承Thread类创建多线程 继承java lang Thread类 重写Thread类的run 方法 在run 方法中实现运行在线程上的代码 调用start 方法开启线程 Thread 类本质上是实现了 R
  • 【Ubuntu换源教程】不同Ubuntu系统版本换清华源

    今天在新电脑上装了虚拟机VMware Workstation Pro 16 在虚拟机上安装了Ubuntu20 04系统 在做Ubuntu20 04系统换源的时候 发现源要和Ubuntu的版本匹配 之前一直不知道 一直都是盲目换源 版本如果不
  • unity给localRotation赋值

    transform localPosition和transform localScale都是直接赋值三元数 给旋转赋值需要用 方法一 xxx transform localEulerAngles new Vector3 0 0f 0 0f
  • JS面试中常见的算法题

    1 验证一个数是否是素数 1 如果这个数是 2 或 3 一定是素数 2 如果是偶数 一定不是素数 3 如果这个数不能被3至它的平方根中的任一数整除 num必定是素数 而且除数可以每次递增 排除偶数 function isPrime num
  • 优秀logo设计解析_优秀Logo设计!具象表现手法!

    文 王新华 具象标志以客观物象的自然形态为造型基础 经过提炼 概括 抓住客观对象的精神内涵 强化其主要特征 忽略与舍弃次要因素 达到直观 感性的视觉效果 人物形 人是万物之灵 是社会的主宰 以人物为题材是标志设计的重要表现内容 人体的各种动
  • C++中memset函数详解

    memset函数定义于
  • Django中分页功能的实现及封装与调用(超详细)

    在django开发过程中 实现前端页面的分页是一个基本且常用的功能 下面就同小编一起完成分页功能的实现及封装与调用 一 在pycharm中创建django项目 小编默认看客朋友们都会创建 故不在赘述 若不熟悉 猛戳这里 二 在mysql中创
  • React事件处理、事件的特点、事件语法、React事件处理函数里的this、事件对象、阻止浏览器的默认行为

    React事件的特点 1 React 事件绑定属性的命名采用驼峰式写法 而不是小写 如 onClick 2 如果采用 JSX 的语法你需要传入一个函数作为事件处理函数 而不是一个字符串 DOM 元素的写法 函数不写小圆括号 3 在 Reac