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

  • gx developer安装教程(gx developer安装教程序列号)

    gx developer安装教程(gx developer安装教程序列号)

  • 抖音名字想改第二次怎么办(抖音名字咋改)

    抖音名字想改第二次怎么办(抖音名字咋改)

  • redmi note9什么时候出

    redmi note9什么时候出

  • 华为nova6发热严重怎么办(华为nova6发热严重吗,耗电快吗)

    华为nova6发热严重怎么办(华为nova6发热严重吗,耗电快吗)

  • 秘乐短视频秘宝是什么(秘乐短视频值得做吗)

    秘乐短视频秘宝是什么(秘乐短视频值得做吗)

  • mate30pro是双卡双待吗(华为mate30pro双卡吗)

    mate30pro是双卡双待吗(华为mate30pro双卡吗)

  • 钢化膜里面有灰尘怎么办(钢化膜下有灰)

    钢化膜里面有灰尘怎么办(钢化膜下有灰)

  • 苹果刷新率多少hz(苹果刷新率多少哪里设置)

    苹果刷新率多少hz(苹果刷新率多少哪里设置)

  • 电脑开机cpu风扇不动(电脑开机cpu风扇转一下就停又转一下)

    电脑开机cpu风扇不动(电脑开机cpu风扇转一下就停又转一下)

  • 微信解封身份验证失败怎么回事(微信解封身份验证失败)

    微信解封身份验证失败怎么回事(微信解封身份验证失败)

  • 提供的内核信息版本无效怎么解决(提供的内核信息版本无效打不开开始菜单)

    提供的内核信息版本无效怎么解决(提供的内核信息版本无效打不开开始菜单)

  • 拍抖音需要什么设备(拍抖音需要什么东西)

    拍抖音需要什么设备(拍抖音需要什么东西)

  • 苹果耳机盒子灯不亮了(苹果耳机盒子上的灯)

    苹果耳机盒子灯不亮了(苹果耳机盒子上的灯)

  • 服务号如何一天发一条(服务号如何一天发8篇)

    服务号如何一天发一条(服务号如何一天发8篇)

  • 得实打印机不进纸原因(得实打印机不进纸1870)

    得实打印机不进纸原因(得实打印机不进纸1870)

  • pr与显卡驱动不兼容(pr2020与显卡驱动不兼容)

    pr与显卡驱动不兼容(pr2020与显卡驱动不兼容)

  • 苹果11用的什么cpu(苹果11用的什么基带)

    苹果11用的什么cpu(苹果11用的什么基带)

  • 拍人用多大光圈(拍人光圈多大合适)

    拍人用多大光圈(拍人光圈多大合适)

  • 如何关闭小爱语音引擎(如何关闭小爱语音搜索功能)

    如何关闭小爱语音引擎(如何关闭小爱语音搜索功能)

  • 抖音放大镜效果在哪(抖音放大镜效果在哪2020)

    抖音放大镜效果在哪(抖音放大镜效果在哪2020)

  • 1200毫安能给手机充多少电(1200毫安手机能用多久)

    1200毫安能给手机充多少电(1200毫安手机能用多久)

  • 手机进水能开机但黑屏(手机进水能开机但屏幕失灵怎么办)

    手机进水能开机但黑屏(手机进水能开机但屏幕失灵怎么办)

  • deepin20怎么卸载软件程序? deepin卸载应用的两种方法(win10卸载deepin)

    deepin20怎么卸载软件程序? deepin卸载应用的两种方法(win10卸载deepin)

  • mgactrl.exe是什么进程 有什么用 mgactrl进程查询(mom.exe是什么)

    mgactrl.exe是什么进程 有什么用 mgactrl进程查询(mom.exe是什么)

  • 税务机关内部控制措施
  • 工程施工企业收入确认成本结转案例
  • 企业所得税成本调减怎么填
  • 其他业务收入在借方表示什么
  • 过了纳税期没有申报
  • 开票名称开错了
  • 银行商业承兑汇票到期怎么兑现
  • 房地产企业回迁房增值税
  • 企业年金如何缴费标准
  • 购买增值税专用发票罪
  • 结转完工入库产品成本计算
  • 定货合同有法律效力吗?
  • 商品破损了应该怎么赔偿
  • 外派人员的一次工作总结
  • 税务未抄报
  • 个人所得税反推器
  • 在建工程转固定资产凭证附件
  • 公司经营权补偿款会计处理?
  • 微信收款会计分录,然后提现有手续费
  • macbookpro如何检测
  • 如何禁用开始目录的app自动推荐
  • xp系统电脑关机后又重启怎样处理
  • php字符串赋值
  • 商贸企业销售
  • php是基于
  • 车辆购置税征收对象
  • 法定假日的加班费怎么算
  • 如何用python求解航天器追逃博弈
  • python单子
  • 支付工资会计
  • 钱进公账怎么转账给别人
  • 差旅费的进项税额需要转出吗
  • 税盘显示已反写
  • 销售返点什么意思
  • 个人以不动产投资成立一人有限公司
  • pandas常见操作
  • 认缴制无实收资本怎么算
  • 四联收据每一联用途
  • 收据4联
  • 企业的资产必须符合哪些条件
  • 工会建账需要建几本账
  • 所得税报表的营业成本包括费用吗
  • 个体工商户是否属于企业
  • 跨年度少计摊销怎么做账
  • 饭店开业多久可以正常
  • 成本法和权益法的相同点
  • 免抵退税会计处理
  • 融资租赁租金会计科目
  • 当月暂估入账跨月怎么算
  • 企业接收到政府信息
  • 职工教育经费调增
  • 多计费用以前年度损益调整账务处理
  • 有哪些不动产
  • 记账凭证可以先做贷方吗
  • 月末未完工半成品的分录
  • mysql 从库
  • windows下mysql安装配置教程
  • sql server的使用方法
  • win8.1使用技巧
  • 苹果mac系统怎么截屏快捷键
  • 使用二氧化碳灭火器时人应该站在什么位置
  • Linux系统中文件的文件名存储在文件所在的目录
  • windows8怎么调整亮度
  • win10访问局域网文件
  • windows远程桌面怎么开启
  • windows10已激活
  • win10 自带
  • -f linux命令
  • linux shell echo
  • 批处理命令修改ip
  • 详细说明什么是支撑
  • css全局声明
  • python中get怎么用
  • android 笔记软件推荐
  • fragment切换保存状态
  • shell脚本实现Linux运维监控
  • 税盘换电脑怎么登陆
  • 电子税务局怎么添加开票员
  • 资源税什么意思
  • 白酒消费税应纳税额
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设