位置: IT常识 - 正文

React基础-JSX事件绑定-事件传参

编辑:rootadmin
React基础-JSX事件绑定-事件传参 文章目录React的事件绑定JSX事件绑定JSX事件传参JSX事件小案例练习React的事件绑定JSX事件绑定

推荐整理分享React基础-JSX事件绑定-事件传参,希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:,内容如对您有帮助,希望把文章链接给更多的朋友!

如果原生DOM原生有一个监听事件,我们可以如何操作呢?

方式一:获取DOM原生,添加监听事件;

方式二:在HTML原生元素中,直接绑定onclick;

在React中是如何操作呢?我们来实现一下React中的事件监听,和原生想不这里主要有两点不同

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

我们需要通过{}传入一个事件处理函数,这个函数会在事件发生时被执行;

render() { return ( <div> <button onClick={this.btnClick}>按钮</button> </div> )}

在事件执行后,我们可能需要获取当前类的对象中相关的属性,这个时候需要用到this

如果我们这里直接打印this,也会发现它是一个undefined

class App extends React.Component { constructor() { super() } render() { return ( <div> <button onClick={this.btnClick}>按钮</button> </div> ) } btnClick() { console.log(this); // undefined }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)

为什么是undefined呢?

React基础-JSX事件绑定-事件传参

原因是btnClick函数并不是我们主动调用的,而且当button发生改变时,React内部调用了btnClick函数;

而它内部调用时,并不知道要如何绑定正确的this;

如何解决this的问题呢?例如我们需要点击按钮, 修改页面中展示的数字

方案一:bind给btnClick显示绑定this

class App extends React.Component { constructor() { super() this.state = { conter: 100 } this.btnClick1 = this.btnClick1.bind(this) } render() { const { conter } = this.state return ( <div> <h2>当前计数: {conter}</h2> {/* this绑定方式一: 通过bind显示绑定this */} <button onClick={this.btnClick1}>按钮1</button> </div> ) } btnClick1() { this.setState({ conter: this.state.conter + 1 }) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)

方案二:使用 ES6 class fields 语法(了解)

class App extends React.Component { constructor() { super() this.state = { conter: 100 } } render() { const { conter } = this.state return ( <div> {/* this绑定方式一: 使用 ES6 class fields 语法 */} <button onClick={this.btnClick2}>按钮2</button> </div> ) } btnClick2 = () => { this.setState({ conter: this.state.conter - 1 }) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)

方案三:事件监听时直接传入箭头函数(个人推荐)

class App extends React.Component { constructor() { super() this.state = { conter: 100 } } render() { const { conter } = this.state return ( <div> {/* this绑定方式三: 直接传入一个箭头函数 */} <button onClick={() => this.btnClick3()}>按钮3</button> </div> ) } btnClick3() { this.setState({ conter: this.state.conter + 1 }) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)JSX事件传参

在执行事件函数时,有可能我们需要获取一些参数信息:比如event对象、其他参数

情况一:获取event对象

很多时候我们需要拿到event对象来做一些事情(比如阻止默认行为)

那么默认情况下,event对象有被直接传入,函数就可以获取到event对象;

class App extends React.Component { constructor() { super() } render() { return ( <div> <button onClick={this.btnClick1}>按钮1</button> </div> ) } // 回调函数时会将event对象传递过来的 btnClick1(event) { console.log(event); }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)

情况二:获取更多参数

当有更多参数时,我们最好的方式就是传入一个箭头函数,主动执行的事件函数,并且传入相关的其他参数;

class App extends React.Component { constructor() { super() } render() { return ( <div> <button onClick={(event) => this.btnClick2(event, "chenyq", 18)}>按钮2</button> </div> ) } btnClick2(event, name, age) { console.log(event, name, age); }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)JSX事件小案例练习

需求: 有一个数组, 用于存放电影列表, 将电影列表展示在页面中, 要求点击哪一个电影名称, 就将哪一个的颜色变为红色

实例代码如下:

class App extends React.Component { constructor() { super() this.state = { movies: ["大话西游", "黑化律师", "独行月球"], currrentIndex: 0 } } render() { const { movies, currrentIndex } = this.state return ( <div> <ul> { movies.map((item, index) => { return ( <li key={item} onClick={() => this.itemClick(index)} className={currrentIndex === index ? 'active' : ''} > {item} </li> ) }) } </ul> </div> ) } itemClick(index) { this.setState({ currrentIndex: index }) }}const app = ReactDOM.createRoot(document.querySelector("#app"))app.render(<App/>)<style> .active { color: red; }</style>
本文链接地址:https://www.jiuchutong.com/zhishi/299356.html 转载请保留说明!

上一篇:学习率设置

下一篇:Mac系统下Flutter安装教程(mac配置flutter环境变量)

  • 如何在微信里找群(如何在微信里找到自己加入的群)

    如何在微信里找群(如何在微信里找到自己加入的群)

  • 苹果12.4.1更新了什么功能(苹果12.4更新了什么)

    苹果12.4.1更新了什么功能(苹果12.4更新了什么)

  • 微信小程序里字体太大怎么办(微信小程序里字体大小调整)

    微信小程序里字体太大怎么办(微信小程序里字体大小调整)

  • 荣耀30时间怎么设置24小时制(荣耀30时间怎么显示在屏幕上)

    荣耀30时间怎么设置24小时制(荣耀30时间怎么显示在屏幕上)

  • cad线加粗快捷键(cad线加粗命令键)

    cad线加粗快捷键(cad线加粗命令键)

  • win10睡眠还能下载吗(win10睡眠可以下载吗)

    win10睡眠还能下载吗(win10睡眠可以下载吗)

  • ipad第7代叫什么 (ipad第七代是啥型号)

    ipad第7代叫什么 (ipad第七代是啥型号)

  • 苹果X摔一下出现绿色一条(苹果x手机摔了一道)

    苹果X摔一下出现绿色一条(苹果x手机摔了一道)

  • 支付宝提示音怎么关闭(支付宝提示音怎么设置)

    支付宝提示音怎么关闭(支付宝提示音怎么设置)

  • 5g路由器是指5g网络么(5g路由器和5g网络有什么区别吗)

    5g路由器是指5g网络么(5g路由器和5g网络有什么区别吗)

  • 系统还原会删除什么(系统还原会删除C盘文件吗)

    系统还原会删除什么(系统还原会删除C盘文件吗)

  • 怎么把淘宝号变成健康(怎么把淘宝变成英文版)

    怎么把淘宝号变成健康(怎么把淘宝变成英文版)

  • 建筑cad标注样式设置(cad标注样式什么意思)

    建筑cad标注样式设置(cad标注样式什么意思)

  • word里的简历模版在哪里找(word里的简历模板花钱吗)

    word里的简历模版在哪里找(word里的简历模板花钱吗)

  • 荣耀v20怎么关闭后台(荣耀v20怎么关闭电池异常提示)

    荣耀v20怎么关闭后台(荣耀v20怎么关闭电池异常提示)

  • unknown是什么网(unknown是啥)

    unknown是什么网(unknown是啥)

  • 华为智慧屏存储是多少(华为智慧屏存储在哪)

    华为智慧屏存储是多少(华为智慧屏存储在哪)

  • 手机拍视频怎么防抖(手机拍视频怎么拉近镜头)

    手机拍视频怎么防抖(手机拍视频怎么拉近镜头)

  • gn8003l是什么型号(gn8002是什么型号)

    gn8003l是什么型号(gn8002是什么型号)

  • 计算机首字下沉在哪儿(计算机首字下沉的名词解释)

    计算机首字下沉在哪儿(计算机首字下沉的名词解释)

  • led手环手表怎么调日期(led手环手表怎么调时间)

    led手环手表怎么调日期(led手环手表怎么调时间)

  • 华为测距仪在哪(华为测距仪在哪里打开)

    华为测距仪在哪(华为测距仪在哪里打开)

  • 华为mate20灭屏显示时间怎么设置

    华为mate20灭屏显示时间怎么设置

  • 大麦如何快速抢票(大麦怎样抢票成功率高)

    大麦如何快速抢票(大麦怎样抢票成功率高)

  • 红包没收能看到金额吗(红包未收有记录吗)

    红包没收能看到金额吗(红包未收有记录吗)

  • 前端知识——css之flex布局(css前端还是后端)

    前端知识——css之flex布局(css前端还是后端)

  • 增值税一般纳税人税率
  • 哪些单位须执行国家政策
  • 养殖合作社属于什么行业
  • 融资租入的固定资产需要计提折旧吗
  • 审计调整分录汇总的内容
  • 会计制度方法
  • 普通增值税发票税号
  • 收入费用率为100.13%说明什么
  • 民办学校账务怎么做
  • 忘记先抄税再申报了怎么办
  • 本期实际缴费金额指的是什么
  • 出租固定资产取得的租金收入属于什么收入
  • 物业公司管理费用
  • 增值税专用发票和普通发票的区别
  • 投资收益所得税税前扣除
  • 小规模纳税人酒水税率
  • 小规模纳税人季报还是月报?
  • 往年度的工资做什么科目
  • 汽车运输增值税专用发票多少税点
  • 个人股权转让印花税在哪里申报
  • 社保打入其他公司代扣分录怎么做?
  • 兼营行为的含义
  • win 安全
  • 企业所得税申报错误怎么更改
  • php字符串赋值
  • 房地产企业前期物业费可否税前扣除
  • 填制的凭证内容有哪些
  • 车辆年审收费么
  • 公证处会计分录
  • elementui中的el-tab-pane为什么内容会为0
  • PHP:imagecolordeallocate()的用法_GD库图像处理函数
  • php md5加盐
  • 劳务费开发票后还需要交个税吗
  • 低值易耗品摊销表格
  • 付检测费会计分录
  • unity常用脚本语言
  • anaconda卸载干净
  • 论文导读怎么做
  • 自动驾驶感知算法
  • vue.js过滤器
  • bash的主要功能
  • php windows
  • 退质保金计入什么科目
  • 建厂购买材料的会计科目
  • 会计损益类科目核算
  • 当月勾选认证可以在下月抵扣吗
  • 暂估库存商品计算怎么算
  • wordpress图片大小设置
  • 2022年我们国家将举行什么样的盛会
  • 富文本word
  • 售后回购会计处理分录
  • mysql批量查询
  • 预收账款可以用吗
  • 季节性停工折旧计入什么科目
  • 保险公司 返点
  • 年终奖都有啥
  • 劳动关系与劳务关系的联系与区别
  • 金税卡就是税控盘吗
  • 企业购买黄金有限制吗
  • 什么是交易性金融资产?交易性金融资产主要有哪些特点?
  • 应收账款的政策
  • sql 修改表的字段名称
  • mysql group order
  • 怎样升级智慧中小学版本软件
  • Win7打印机驱动备份
  • windows8触摸屏手势设置
  • linux的trace
  • 电脑系统 win7
  • win7系统出现蓝屏怎么解决
  • /usr/bin/install: 无法创建一般文件‘/usr/local/man/man1/cjpeg.1’: 没有那个文件
  • win10交接wifi
  • 校园网升级套餐
  • 更改uac设置在哪
  • 微信小程序图片加载不出来
  • python汉字字符
  • 手机糖果游戏娱乐
  • android基础教程第三版电子版
  • 云南国税app
  • 房产税交错了能否退款
  • 地税局跟税务局有什么区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设