位置: IT常识 - 正文

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

发布时间:2024-01-17
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环境变量)

  • 边缘人毕业歌《四年》(边缘人毕业歌 四年)(边缘人毕业歌《四年》)

    边缘人毕业歌《四年》(边缘人毕业歌 四年)(边缘人毕业歌《四年》)

  • 华为P30pro的铃声渐强可以取消吗(华为p30pro铃声怎么设置)

    华为P30pro的铃声渐强可以取消吗(华为p30pro铃声怎么设置)

  • Word右上角标怎么弄(word文档中右上角角标如何打)

    Word右上角标怎么弄(word文档中右上角角标如何打)

  • QQ怎么把压缩文件发给QQ好友(qq怎么把文件压缩)

    QQ怎么把压缩文件发给QQ好友(qq怎么把文件压缩)

  • 为什么进不了群(qq为什么进不了群)

    为什么进不了群(qq为什么进不了群)

  • 你的设备中缺少重要更新(你的设备中缺少重要的安全和质量修复有什么影响)

    你的设备中缺少重要更新(你的设备中缺少重要的安全和质量修复有什么影响)

  • 探探的活跃度准不准(探探的活跃度是什么意思)

    探探的活跃度准不准(探探的活跃度是什么意思)

  • QQ空间为什么出现陌生访客(qq空间为什么出不来了)

    QQ空间为什么出现陌生访客(qq空间为什么出不来了)

  • word意外关闭怎么找之前编辑文档(word意外关机怎么恢复)

    word意外关闭怎么找之前编辑文档(word意外关机怎么恢复)

  • 华为手机钥匙图标取消不掉(华为手机钥匙图标取消不掉没有链接nvp怎么办)

    华为手机钥匙图标取消不掉(华为手机钥匙图标取消不掉没有链接nvp怎么办)

  • 误删了微信对话框怎么恢复(误删了微信对话框聊天记录为什么没了)

    误删了微信对话框怎么恢复(误删了微信对话框聊天记录为什么没了)

  • 红米airdots怎么切歌(红米airdots怎么看电量)

    红米airdots怎么切歌(红米airdots怎么看电量)

  • oppo的sd卡在哪里打开(oppo手机sd卡存储权限在哪打开)

    oppo的sd卡在哪里打开(oppo手机sd卡存储权限在哪打开)

  • 笔记本显卡和台式机显卡区别(笔记本显卡和台式机显卡性能对比)

    笔记本显卡和台式机显卡区别(笔记本显卡和台式机显卡性能对比)

  • 华为畅享10如何设置呼吸灯(华为畅享10如何分屏)

    华为畅享10如何设置呼吸灯(华为畅享10如何分屏)

  • 华为gt手表防水几级(华为gt2手表防水吗)

    华为gt手表防水几级(华为gt2手表防水吗)

  • windows7怎么恢复出厂设置(windows7怎么恢复默认主题)

    windows7怎么恢复出厂设置(windows7怎么恢复默认主题)

  • 苹果x待机时间多久(苹果x待机时间多长正常)

    苹果x待机时间多久(苹果x待机时间多长正常)

  • 手机账号密码是什么(手机账号密码是啥)

    手机账号密码是什么(手机账号密码是啥)

  • 数据库外码的定义(数据库外码的定义语句)

    数据库外码的定义(数据库外码的定义语句)

  • 一加7t什么时候发布(一加7什么时候出)

    一加7t什么时候发布(一加7什么时候出)

  • 云骑士的系统是正版吗

    云骑士的系统是正版吗

  • qq为什么进不去(qq为什么进不去群怎么解决)

    qq为什么进不去(qq为什么进不去群怎么解决)

  • vivoz5x返回键在哪里(vivoz5x返回键在哪里设置)

    vivoz5x返回键在哪里(vivoz5x返回键在哪里设置)

  • ipad新手使用指南(ipad新手使用指南2018)

    ipad新手使用指南(ipad新手使用指南2018)

  • ones刻录软件怎么使用(ones刻录软件怎么刻录文件)

    ones刻录软件怎么使用(ones刻录软件怎么刻录文件)

  • 小微企业应纳税所得额是指什么
  • 税收滞纳金调增填哪张表
  • 增值税加计扣除怎么做账
  • 从价从量复合计征
  • 总账一级科目有哪些
  • 以前年度多计管账怎么做
  • 融资租入的固定资产需要计提折旧吗
  • 支付劳务派遣管理费现金流量表里放在哪里
  • 应付账款发生额在哪方
  • 民办非企业收入会计分录
  • 商用住房出租需要交什么税?
  • 自营建造固定资产的账务处理
  • 职工死去还有工资吗
  • 怎么分清楚待认识的人
  • 小规模纳税人的税率是多少
  • 小规模纳税人2018
  • 财务费用应计入什么账户
  • 赊销方式何时确认收入呢
  • 公司购买房产的税费
  • 中药材免税还能抵扣收购发票
  • 自己种的苗木开发票要什么手续
  • 公司车贷款还款怎么操作
  • 土地交易服务费分录
  • 收到股利的现金会计分录
  • 高新企业认定 研发委外费用
  • 在银行买理财产品
  • 调出进程管理器
  • 二手车买卖如何纳税
  • 银行手续费填在汇算清缴的哪个表
  • edge浏览器总是打开新的网页
  • 税金及附加多计提所得税年报怎么更正
  • php大小写转换函数怎么写
  • 小规模开普票后怎么报增值税
  • 计提劳务派遣人员社保收到发票后没有付款的会计分录
  • win 8和win 7有什么区别
  • hpwuschd application
  • 出差补贴如何入账报销
  • php数据库编程
  • 税务局要求小规模纳税人开专票
  • 合伙企业分配股票给合伙人
  • 暂估和开票的差别是什么
  • 法院判定支付对方诉讼费,我可以入账吗
  • thinkphp钩子场景
  • 社会团体所得税汇算清缴
  • mongodb项目使用说明
  • 预缴税款可以抵扣简易计税
  • 如何确定固定资产的原始成本
  • 个人所得税汇算清缴
  • 农副产品增值税发票怎么开
  • 企业所得税和个人所得税怎么算
  • sql server获取字段长度
  • 其他货币资金怎么结转
  • 小规模印花税有减免政策吗
  • 收据可以纳税吗
  • 年金终值计算公式是
  • 没实收资本还怎么做账
  • 发票缴销了还能恢复吗
  • 出口货物索赔如何确认收入
  • 投资收益 增加
  • 仓库周转率是什么意思
  • java程序怎么直接运行
  • linux在服务器领域的应用状况
  • Win10怎么关闭任务栏搜索
  • linux操作系统主要学什么
  • 禅道界面
  • linux usb audio
  • js日期操作
  • python提取xml的值
  • shell脚本替换文件中某个字符串
  • Android使用的方式来管理
  • js如何实现重置功能
  • Python连接MySQL并使用fetchall()方法过滤特殊字符
  • webview自定义视频播放器
  • vue瀑布流实现
  • 网络发票开票系统怎么设置?
  • 外经证办理流程在哪个网站申请
  • 山东地方税务局官网
  • 南京国税局长是谁
  • 大连市国家税务局官网登录
  • 地税收税标准
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号