位置: 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环境变量)

  • 华为watchfitnew有gps吗(华为watchfitnew有独立GPS吗)

    华为watchfitnew有gps吗(华为watchfitnew有独立GPS吗)

  • 夸克账号怎么退出登录(夸克会员怎么退订)

    夸克账号怎么退出登录(夸克会员怎么退订)

  • 太平洋电脑网微信小程序正式上线,一起来体验吧!(太平洋电脑网微信分身苹果版)

    太平洋电脑网微信小程序正式上线,一起来体验吧!(太平洋电脑网微信分身苹果版)

  • a14比a13强多少(a14比a13强多少能耗)

    a14比a13强多少(a14比a13强多少能耗)

  • 钉钉老师能看到学生看回放的时间吗(钉钉老师能看到学生分屏吗)

    钉钉老师能看到学生看回放的时间吗(钉钉老师能看到学生分屏吗)

  • 苹果xsmax保修期内屏幕碎了(xsmax保修期在哪看)

    苹果xsmax保修期内屏幕碎了(xsmax保修期在哪看)

  • 苹果xr和xs区别(苹果xr和xs参数配置对比)

    苹果xr和xs区别(苹果xr和xs参数配置对比)

  •  戴尔显示器型号解读(戴尔显示器型号解读 后缀)

    戴尔显示器型号解读(戴尔显示器型号解读 后缀)

  • 线程间通信的几种方法(线程间通信的几种机制)

    线程间通信的几种方法(线程间通信的几种机制)

  • 微信红包账单怎么一次性删除(微信红包账单怎么删除)

    微信红包账单怎么一次性删除(微信红包账单怎么删除)

  • 抖音允许个人发广告吗(抖音允许个人发作品吗)

    抖音允许个人发广告吗(抖音允许个人发作品吗)

  • 1000kbps是多少网速(1000kb/s是多少网速)

    1000kbps是多少网速(1000kb/s是多少网速)

  • autocad默认扩展名是什么(autocad默认扩展名)

    autocad默认扩展名是什么(autocad默认扩展名)

  • 青桔单车忘记锁被别人骑走怎么办(青桔单车忘记锁车被别人骑走了怎么办)

    青桔单车忘记锁被别人骑走怎么办(青桔单车忘记锁车被别人骑走了怎么办)

  • 在抖音里什么叫回关(在抖音里什么叫粉丝)

    在抖音里什么叫回关(在抖音里什么叫粉丝)

  • 焦距4mm能看清多少距离(焦距4 mm)

    焦距4mm能看清多少距离(焦距4 mm)

  • e140wp是千兆光猫吗(i040em光猫参数)

    e140wp是千兆光猫吗(i040em光猫参数)

  • 微博怎么找以前关注的人(微博怎么找以前浏览过的图片)

    微博怎么找以前关注的人(微博怎么找以前浏览过的图片)

  • 什么是osi参考模型(什么是osi参考模型中最靠近用户的一层)

    什么是osi参考模型(什么是osi参考模型中最靠近用户的一层)

  • 开通有线电视需要带什么材料

    开通有线电视需要带什么材料

  • 苹果备忘录怎么成图片(苹果备忘录怎么变成黑色)

    苹果备忘录怎么成图片(苹果备忘录怎么变成黑色)

  • 手机变成2g咋回事(手机变成了2g)

    手机变成2g咋回事(手机变成了2g)

  • 拼多多宝刀可以用几次(拼多多砍价可以买宝刀吗)

    拼多多宝刀可以用几次(拼多多砍价可以买宝刀吗)

  • raft投网器怎么用(raft投网器怎么精准抓羊)

    raft投网器怎么用(raft投网器怎么精准抓羊)

  • win10怎么升级1903(win10怎么升级到最新版本)

    win10怎么升级1903(win10怎么升级到最新版本)

  • 如何让解决Win7系统重装后耳机没有声音?(如何让解决中世纪基督教世界黑暗)

    如何让解决Win7系统重装后耳机没有声音?(如何让解决中世纪基督教世界黑暗)

  • Linux禁用root账户的方法(linux禁用root用户)

    Linux禁用root账户的方法(linux禁用root用户)

  • 销项税减去进项税
  • 小规模纳税人开专票税率是1%还是3%
  • 开外经证需要预缴税几个点
  • 公司法人和经理承担责任一样吗
  • 活动策划费属于业务宣传费吗
  • 公司给离职员工多发工资怎么办
  • 应税服务增值税抵免
  • 修理办公用复印机好吗
  • 会计核算不实
  • 出纳如何做好保密工作
  • 外购烟丝消费税是多少
  • 营改增后企业要交哪些税
  • 商标是按年交费的吗
  • 所得税计税方法
  • 事业单位购入车辆如何做账
  • 行政单位提现预算会计处理
  • 企业年金企业所得税扣除标准
  • 安装费的税费的会计分录
  • qq画画图片大全
  • 房地产企业收取的诚意金
  • win10开机选择系统%1
  • 合伙企业合伙人数量
  • 月末计提固定资产折旧时,应借记
  • 出租固定资产收入计入什么科目
  • office进程
  • 微软告诉你
  • 不动产租赁费计入什么科目
  • php trim()
  • 金融机构与小微企业借款合同印花税
  • 报个税时显示扣缴单位无有效的税费种认定信息
  • 融资租赁的固定资产所有权归谁
  • 微信小程序商城源码php
  • 安装多版本chrome
  • 深度测试软件
  • 如何防止sql注入 java
  • 上年度固定资产少入账了怎么办?
  • 增值税进项税额计算公式
  • vue大型项目架构设计
  • 公益组织可以开公司吗
  • python迭代器有什么用
  • python字符串类型及操作
  • 清包工方式建筑服务
  • 电子口岸无纸化报关
  • shell取命令执行结果
  • mysql修改表结构的关键字
  • 员工加班餐费算什么费用
  • 公司购买不动产契税税率
  • 建筑业服务包含哪些?
  • 在建工程包括哪些大类科目
  • 非货币性资产含义
  • 收到的承兑怎么转给别人
  • 营改增后劳务派遣公司账务处理
  • 公司之前借款没入账现在还款
  • 内部债权债务的抵消分录
  • 应收票据的分录怎么做
  • 用友t3计提折旧了没有生成凭证
  • 冲红专票分录
  • 银行结息需要开发票吗
  • 收到银行结息收入怎么做会计分录
  • sql server日期函数有哪些
  • mysql免安装版本
  • win10如何连接远程电脑
  • 怎么进入bios设置界面win10
  • drupdate
  • 360误删文件恢复怎么恢复
  • win10系统如何给d盘加密
  • windows8使用技巧
  • win10怎么用ios上网
  • red hat linux安装
  • windows 8怎么样
  • iis安装步骤 windows server 2008
  • win8开始界面设置
  • cocos2dx4.0入门
  • cocos creator rpg
  • javascript unicode与GBK2312(中文)编码转换方法
  • Javascript获取元素的父元素
  • python的cumprod
  • 浙江国税局电话客服热线
  • 浙江国税咨询电话12306
  • 低收入个人所得税
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设