React事件处理方法

2023-11-04

一、注意事项

1.React元素的事件处理和Dom元素很相似,但是有一点语法的不同

2.React事件的命名采用小驼峰的命名方式,而不是纯小写(camelCase)

3.使用JSX语法时你需要传入一个函数作为事件处理函数,而不是一个字符串

 例如:

在传统HTML的dom中:

<button onclick="click()"></button>

但在React中略有不同(不可以加圆括弧)

<button onClick={click}></button>

二、在函数组件中的使用方法

函数组件:在函数组件中的使用比较简单,在组件中定义函数组件,然后注意onclick以及普通函数要用小驼峰命名。

function FunctionMethod(){
return(
    <div>
    <button onClick={onButtonClick}>点击</button>
    </div>
)

}
function onButtonClick(){
    console.log('你用函数组件kiss,kiss');
}

export default FunctionMethod;

三、在类组件中的使用方法 

类组件 :在类组件中事件事件处理函数在类组件的实例对象上,所以在onclick以及处理函数要小驼峰明明以外,还要注意的是调用事件处理对象的时候要用this取到实例对象找到处理方法。

import React from "react";
class Classmethod extends React.Component{
constructor(props){
    super(props);
    this.state={

    };
}
onButtonClick(){
    console.log('你用类组件diss我了')
}
render(){
    return(
        <div>
          <button onClick={this.onButtonClick}>(类)点击</button>
        </div>
    );
}
    
}
export default Classmethod;

四、事件处理函数如何获取事件对象

事件发生时,事件处理函数会执行,同时接受到事件对象为参数

onKeyUp(event){
if(event.which == 13){
    console.log(event.target.value);
}
}
render(){
    return(
        <div>
          <button onClick={this.onButtonClick}>(类)点击</button>
          <input type="text"  onKeyUp={this.onKeyUp } />
        </div>
    );
}

五、this绑定值

当我们在类组件中,写的事件处理函数,他的this是undefined,所以我们需要将其赋值,在constructor中写入这样一行代码给this改绑定地址,不能用call和apply,因为更改以后会直接执行,不符合我们预期想要的

 this.onButtonClick=this.onButtonClick.bind(this);

 六、给事件处理函数传入除事件对象以外的其他参数(套外壳)

当我们需要给事件处理函数传入除事件对象以外的其他参数的时候,我们需要在调用的时候给事件处理函数套一个箭头函数,即如下代码

onPrint(text,ev){
     console.log(text);
console.log(ev);
};
render(ev)
{
  return <button onClick={()=>{this.onPrint('haha',ev)}}>点我输出</button>}

注:参数按照顺序依次对应,只有作为事件处理函数地实例方法的this被重置为undefined值,通过bind绑定this指向

 

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

React事件处理方法 的相关文章

  • 使用画布元素作为文本区域

    我正在寻找有关如何使用类似于文本区域的画布元素的直接描述 我见过这样的项目Ace http ace ajax org 只是想知道如何像文本区域一样写入该区域 只是纯文本 没有什么花哨的 提前致谢 Ace 曾经是 Mozilla Skywri
  • NodeJs读取JSON文件

    我正在使用 NodeJs 读取 json 文件 我的代码非常基本 var obj require sample json console log obj 0 Sample json 文件包含这样的字符串化 JSON sample good
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • Webpack 和 Angular HTML 图像加载

    我一直对 webpack 和 Angular 感到头疼 这可能有一个简单的答案 但我无法弄清楚 我已经阅读了堆栈溢出中关于这个主题的几乎所有答案 但都无济于事 我有一个像这样的 html 页面 还有其他包含图像的模板 img
  • Disqus 评论数始终为 0 条评论

    我想我已经按照通用代码的说明设置了 Disqus 问题是它总是说某个帖子有 0 条评论 拿这个帖子来说 http tx0rx0 com retropie and the raspberry pi http tx0rx0 com retrop
  • SVG 中三角形的圆角

    我正在尝试制作一个具有圆角的三角形 三角形将如下所示 左下角是唯一看起来相当容易制作的角 主要是因为这是一个 90 度的 转弯 该转弯是使用QSVG 中的命令具有以下参数 Q x y height x y height RADIUS从我正在
  • 数据表“footerCallback”函数未在页脚中显示结果

    我尝试获取每列的总和并将结果显示在页脚中 我在用着 页脚回调 https datatables net reference option footerCallbackDatatables提供的功能 但是它在页脚中没有显示任何内容 数据表解释
  • 当 deps 为 [] 时,React 警告 React Hook useEffect 缺少依赖项

    我正在尝试清理 DOM 中的警告 并且对于每个useEffect部门在哪里 我收到一条错误消息 指出 useEffect 缺少依赖项 我想在安装组件时触发效果 我的印象是这就是做到这一点的方法 如果是这样 为什么会出现警告 这是我使用的简单
  • 将数组中的所有元素相乘

    我在这里找不到我真正想要的例子 我想将所有数组元素相乘 因此如果数组包含 1 2 3 总和将为 123 6 到目前为止 我已经得到了这段代码 但它返回未定义 function multiply array var sum 1 for var
  • 全局未在 ../node_modules/socket.io-parser/is-buffer.js 中定义

    预先感谢您帮助我 我正在尝试在我的一个角度组件中连接套接字 但在浏览器的控制台中它会抛出一个错误 指出 Global 未在 Object node modules socket io parser is buffer js 中定义 这是我的
  • 我可以在不使用 Jquery UI 的情况下获得 Jquery Pulsate Effect 吗?

    我遇到了由于某种原因无法使用 Jquery UI 的情况 我正在尝试在不使用 Jquery UI 的情况下获得 Jquery UI 脉冲效果 与此链接类似 http docs jquery com UI Effects Pulsate ht
  • 表单序列化javascript(无框架)

    想知道 javascript 中是否有一个没有 jquery 或任何框架的函数可以让我序列化表单并访问序列化版本 2023 年更新 Use FormData https developer mozilla org en US docs We
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • Morgan Logger + Express.js:写入文件并在控制台中显示

    我正在尝试将 Morgan 与 Express js 结合使用来编写日志文件 同时也在控制台上显示我的日志 我正在使用这段代码 var logger require morgan var accessLogStream fs createW
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • 指定在任何 Jest 设置发生之前运行的代码

    tl dr 是 1 我怎样才能让Jest使用原生的require函数可以在任何地方加载我的测试中的所有模块 2 我将在哪里 如何进行修改 即替换为esm加载程序 https github com standard things esm ht
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag
  • 如何从react-bootstrap复选框获取值/属性?

    我正在尝试使用反应引导复选框 https react bootstrap github io components html forms controls https react bootstrap github io components
  • 将 Angular Web 组件 EventEmitter 监听到 javascript

    我在以下工具的帮助下创建了一个小型网络组件本文 https medium com IMM9O web components with angular d0205c9db08f使用角度元素 其中包括 Input and Output 我能够将

随机推荐

  • http及https的 抓包分析

    HTTP及HTTPS实验 1 访问http wwww qq com和https www sangfor com cn并抓包 分析从PC访问到结束访问网站的全数据流过程 2 分析DNS解析过程及请求回应报文结构 掌握DNS报文结构特征和DNS
  • 编译执行和解释执行有什么区别

    什么是脚本 脚本是嵌入式代码 无需编译器就可以在环境中运行 起到解释作用 动态程序一般有两种方式 1 二进制方式是将我们编写的程序进行编译 编程机器可以识别的指令代码 然后再执行 这种已编译好的程序让我们只能执行 使用 却看不他的程序内容
  • vue的常用的属性有哪些?

    new vue el data template methods computed render watch vue总共有7个常用的属性 如上 el 表示一个vue对象需要挂载到哪一个html对象上面 值为那个html对象的id data
  • 【复赛模拟试题】收费站(二分答案+Dijkstra)

    问题描述 在某个遥远的国家里 有n个城市 编号为1 2 3 n 这个国家的政府修建了m条双向的公路 每条公路连接着两个城市 沿着某条公路 开车从一个城市到另一个城市 需要花费一定的汽油 开车每经过一个城市 都会被收取一定的费用 包括起点和终
  • 负载

    参考博客 https baike baidu com item E8 B4 9F E8 BD BD E7 94 B5 E9 98 BB 1136575 fr aladdin http www elecfans com d 938676 ht
  • Python包和库

    2 3 包和库 2 3 1 包的概念 包是在模块之上的概念 为了方便管理而将多个脚本文件 模块文件 进行打包 包是一种用点式模块名构造 Python 模块命名空间的方法 例如 模块名 A B 表示包 A 中名为 B 的子模块 正如模块可以区
  • Vue生成二维码

    文章目录 概要 整体架构流程 实现过程 创建vue VsCode打开项目 打开终端 下载qrcodejs2插件 导入和使用qrcodejs2 代码展示与讲解 概要 实现输入内容后点击回车或生成按钮 生成二维码 扫描后是我们在输入框的值 在上
  • 华为OD机试 - 找到比自己强的人数(Java)

    题目描述 给定数组 2 1 3 2 每组表示师徒关系 第一个元素是第二个元素的老师 数字代表排名 现在找出比自己强的徒弟 输入描述 无 输出描述 无 用例 输入 2 1 3 2 输出 0 1 2 说明 输入 第一行数据 2 1 表示排名第
  • 立刻更新你的苹果设备!苹果被曝2大安全漏洞,无需交互就能被植入间谍软件...

    萧箫 发自 凹非寺量子位 公众号 QbitAI 不要犹豫 立刻更新你的苹果设备 就在这两天 一家安全组织发现了苹果设备的2个最新漏洞 平板 手机 电脑等都受影响 例如搭载iOS 16 6版本的iPhone手机 以及新版本的iPad平板 Ma
  • b宝塔 centos端口更改_宝塔Linux面板添加安全入口,修改管理员默认用户名与端口...

    网站安全问题是件非常容易被忽视掉的事情 有些同学安装宝塔Linux面板之后管理员账号依旧使用的是admin 使用默认的账号密码很容易被入侵 因此猫总总结了使用宝塔面Linux板必须修改的三点 宝塔Windows面板用户同样需要注意安全问题
  • IDEA 下Java获取Tomcat 项目运行路径问题

    最近在学习SpringMVC的上传文件过程中 使session getServletContext getRealPath photo 获取项目运行路径 却发现获取得到的是 C Program Files Apache Software F
  • UBT11:ubuntu安装IDEA2020.1

    11 1 简介 linux上的IDEA并不需要安装 只要解压即可运行 这就好像win上面的绿色软件 所以 我们需要把idea解压到一个合适的位置 然后创建桌面快捷方式 即可完成安装 此方法应该适用于整个JetBrains的软件 11 2 环
  • mysql8 window安装,链式复制,双主复制,数据库的负载均衡

    by xuejianxinokok 163 com 2021年3月25日 周四 15 06 43 1 下载地址 https dev mysql com downloads mysql 2 下载文件名称为 mysql 8 0 23 winx6
  • 2022年“网络安全”赛项海南省赛选拔赛 任务书

    2022年 网络安全 赛项海南省赛选拔赛 任务书 一 竞赛时间 共计6小时 二 A模块基础设施设置 安全加固 350分 一 项目和任务描述 假定你是某企业的网络安全工程师 对于企业的服务器系统 根据任务要求确保各服务正常运行 并通过综合运用
  • Linux系统安装R语言

    R语言是一款开源 免费的用于绘图和统计分析的语言和集成环境 该语言使用起来十分方便 提供了许多扩展包供下载使用 目前网上一些linux安装R语言的教程太过繁琐 其实 在ubuntu linux 系统下利用其提供的apt get命令可以方便的
  • macbook pro 散热方案,温度仅29度

    结论 Macbook Pro 13 3 寸 2017 控制住温度 性能飞起 5年前散热不好时 容易触发 CPU 降频 一 需求 长时间满载运行不降频 控制住温度 控制住散热噪音 二 尝试过的散热方案 散热方案 说明 最低温度 满载温度 一
  • 华为云云耀云服务器L实例评测

    前言 在上篇文章 华为云云耀云服务器L实例评测 快速部署MySQL使用指南 中 我们已经用 华为云云耀云服务器L实例 在命令行窗口内完成了MySQL的部署并简单使用 但是后台有小伙伴跟我留言说 能不能用 华为云云耀云服务器L实例 来实现个简
  • 联盛德W800开发板

    目录 W800 芯片介绍 W800开发板 主要接口如下 1 概述 2 准备工作 3 SDK目录结构如下 4 W800编译固件编译 4 1 安装MSYS到本地 4 2增加国内软件更新源 编辑4 3下载工具链 4 5 make工具链配置 5 M
  • 浪潮服务器不显示光驱,电脑不从光驱启动怎么办?我是浪潮品牌的机子。

    在DOS下可以装系统的 WIN98启动软盘引导系统为例在DOS下安装XP 为提高安装速度 需要在启动盘中添加smartdrv exe磁盘高速缓存 cache 程序 并且在安装之前运行该程序 smartdrv是一个磁盘高速缓存程序 称之为sm
  • React事件处理方法

    一 注意事项 1 React元素的事件处理和Dom元素很相似 但是有一点语法的不同 2 React事件的命名采用小驼峰的命名方式 而不是纯小写 camelCase 3 使用JSX语法时你需要传入一个函数作为事件处理函数 而不是一个字符串 例