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

  • 小米civi怎么设置24小时(小米civi怎么设置nfc)

    小米civi怎么设置24小时(小米civi怎么设置nfc)

  • 苹果11手机悬浮球在哪里设置关闭(苹果11手机悬浮球怎么设置)

    苹果11手机悬浮球在哪里设置关闭(苹果11手机悬浮球怎么设置)

  • 探探扣费怎么申请退款(探探续费怎么申请退款)

    探探扣费怎么申请退款(探探续费怎么申请退款)

  • wlan信号桥(wlan信号桥是干什么用的)

    wlan信号桥(wlan信号桥是干什么用的)

  • 搜索微信号没添加对方知道吗(搜索微信号不添加好友对方知道吗)

    搜索微信号没添加对方知道吗(搜索微信号不添加好友对方知道吗)

  • airpods充电线和手机一样吗(airpods充电线和苹果原配线一样吗)

    airpods充电线和手机一样吗(airpods充电线和苹果原配线一样吗)

  • 键盘正常但是不能输入(键盘正常但是不能打字,打字会按出快捷)

    键盘正常但是不能输入(键盘正常但是不能打字,打字会按出快捷)

  • 怎么强制退出talkback(怎么强制退出talkback小米)

    怎么强制退出talkback(怎么强制退出talkback小米)

  • 内存条8g和16g可以一起用吗(内存条8g和16g可以装一起吗)

    内存条8g和16g可以一起用吗(内存条8g和16g可以装一起吗)

  • 苹果6s16g内存不够用怎么办(16g苹果6sp内存不足)

    苹果6s16g内存不够用怎么办(16g苹果6sp内存不足)

  • 微信更新一直显示等待中(微信更新一直显示打开页面)

    微信更新一直显示等待中(微信更新一直显示打开页面)

  • 苹果XR电池容量99还耐用吗(苹果xr电池容量80可以用多久)

    苹果XR电池容量99还耐用吗(苹果xr电池容量80可以用多久)

  • 苹果手机屏幕镜像什么意思(苹果手机屏幕镜像怎么关闭不了)

    苹果手机屏幕镜像什么意思(苹果手机屏幕镜像怎么关闭不了)

  • 安卓耳机苹果能用吗(安卓耳机苹果能不能联)

    安卓耳机苹果能用吗(安卓耳机苹果能不能联)

  • 趣分类不玩可以注销吗(趣分类这几天怎么了)

    趣分类不玩可以注销吗(趣分类这几天怎么了)

  • oppo怎么关闭呼吸灯(oppo手机呼叫限制)

    oppo怎么关闭呼吸灯(oppo手机呼叫限制)

  • 手机座公交车怎么扫码(手机坐公交车怎么弄)

    手机座公交车怎么扫码(手机坐公交车怎么弄)

  • 苹果7插上耳机还是外放(苹果7插上耳机没反应但可以充电)

    苹果7插上耳机还是外放(苹果7插上耳机没反应但可以充电)

  • win10重置成功率(windows10重置会怎么样)

    win10重置成功率(windows10重置会怎么样)

  • 2600有没有核显(2600有核心显卡吗)

    2600有没有核显(2600有核心显卡吗)

  • pr如何导出flv格式视频(pr2020导出flv格式)

    pr如何导出flv格式视频(pr2020导出flv格式)

  • 寻找淘宝关键词的渠道有哪些(淘宝关键词搜索在哪)

    寻找淘宝关键词的渠道有哪些(淘宝关键词搜索在哪)

  • 分享帝国CMS首页调用最新会员、活跃会员与积分排行的方法(分享帝国cms首页在哪)

    分享帝国CMS首页调用最新会员、活跃会员与积分排行的方法(分享帝国cms首页在哪)

  • 使用增值税发票的条件
  • 企业所得税的征收对象是什么
  • 赠送的代金券属于销售费用吗?
  • 合并报表会计未分配利润怎么填写?
  • 一般纳税人缴纳税金分录
  • 税务现金流量表怎么填
  • 公司成立前发生业务 成立后开票
  • 微信小程序需要授权怎么设置
  • 公司零申报怎么注销
  • 通行费抵扣入账会计分录?
  • 未入账成本
  • 摊销商标使用权的会计科目
  • 劳动仲裁是怎样仲裁公司的
  • 新版增值税开票软件怎么下载
  • 进项税额待转出是什么意思
  • 纳税人是非开业户是什么意思
  • 建筑行业一般纳税人简易征收的范围
  • 开具电费发票说明
  • 企业牌照拍卖收入计入什么科目
  • 外购软件可以加计扣除吗
  • 账上少了25元怎么做账
  • 土地增值税加计5%扣除年限
  • 公司室内装修
  • 收到销项负数发票怎么抵扣
  • 如何能屏蔽自动扣费服务
  • mac 应用
  • 变动成本法和完全成本法利润差异
  • 权益净利率如何提高
  • 个税返还的会计处理方法
  • 银行的贷款怎么发放
  • 苹果macOS 11开发者预览版发布
  • ios 的 safari 浏览器
  • 发票管理的基础环节
  • pytorch model.module
  • 处理固定资产时的账务处理
  • 发票多开了 财务怎么算税点
  • 详解16型人格
  • gpt40
  • SpringBoot+Vue实现在线商城系统
  • 未开票收入下月开票
  • 城市维护建设税,教育费附加,地方教育费附加
  • opengl全称
  • 下列行为免征增值税的有
  • 购货方收到销售折扣发票怎么入账
  • 生产经营个人所得税税率表
  • 跨月发票作废如何恢复
  • 确认资产减值损失后可以转回的
  • 个人工资税收怎么计算年收入
  • 商业地产收税
  • 暂估入账跨年如何红冲
  • 新成立的公司能干吗
  • 注册资本越多越好吗
  • mysql 5.7.30安装
  • 必须会的sql语句有哪些
  • win10日历怎么设置
  • ghost 硬盘对考
  • safeplugin是什么软件
  • windowsxp如何隐藏文件
  • linux tcpping
  • win10登陆界面怎么关闭
  • windows7网速慢怎么解决
  • WIN10系统更新文件在哪里
  • WIN7系统的镜像文件在哪里
  • combobox jsp
  • Android NDK Cocos2dx 3.4 Label中文显示
  • 我的第二个姐姐用英语怎么说
  • ExtJS 2.0实用简明教程之应用ExtJS
  • LayoutInflater.inflate方法解析
  • win7 android studio
  • androidsocket原理
  • android开发项目实战+源码教程
  • 表格指定高度是多少
  • linux perl -e
  • 使用express
  • 深入学习习总书记系列讲话精神
  • Jar mismatch! Fix your dependencies
  • 基于jQuery的AJAX和JSON实现纯html数据模板
  • jquery实现全选和取消全选
  • 货物劳务税包括哪些税
  • 扶贫绩效目标申请怎么写
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设