在react中使用event(事件对象),如何使用,注意事项和react中如何定义和使用函数?
定义function
类型
fn() { console.log(this) }
使用function
类型
render() { return ( <div> <Button onClick={this.fn}>请点击</Button> </div>) }
会引发什么样子的问题呢?
this
指向的问题
接下来当页面加载完毕的时候我打印一次this
和点击以后的this
做一次对比
页面初始化完毕以后this的参数
fn函数内部的this(这里的this指向的就是函数自己)
如何解决function函数的this指向的问题呢?
call
、aplay
和 bind
这里就不一一列举了,最常用的就是bind
bind: 方法会创建一个新的函数,当被调用的时候,将其this关键字设置为提供的值,我们必须手动去调用
<Button onClick={this.fn.bind(this)}>请点击</Button>
看看效果吧 !
这里的代码没有改变
使用bind以后的结果:
箭头函数类型的定义和使用
定义
使用方式和function一样的区别在于箭头函数没有自己的this
指向,只会向上继承父级的this
指向,如果父级没有this
指向还会继续向上检索
执行后的效果
如何进行事件传参呢?
1.使用bind,call,aplay
2.使用箭头函数的方式传参
重点来了,如何使用事件对象event?
不传参的情况下
不传参的情况下默认值就是event
如果我需要传参还需要获取事件对象event呢?
1.使用bind,call,aplay
<Button onClick={this.fn.bind(this, '我是传递进去的参数')}>请点击</Button>
结果
这是为什么呢?
当你使用bind,call,aplay着三个函数的时候,默认他最后一位的参数就是event事件对象
如果我传递三个参数呢?
第二个参数是没有值的
就会发现最后一个怎么没有值呢?
通过推算的出来的结果是赋值的event的公式应该是传递进去参数的长度 + 1 = 就是event事件对象最后所在的位置
2.使用箭头函数(使用较多)
<Button onClick={(e) => this.fn(e,'我是传递进去的参数')}>请点击</Button>
这里的运行机制就相当于,我先拿到事件对象赋值给原先的函数,因为函数如果不传参的情况下,默认值,就是事件对象。()=>
这种写法相当于直接返回结果
这种写法是万万不可的!!!
像这种方法就相当于这个button按钮好了以后就加载这个函数
render树刷新一次,这个事件都会执行一次,会增加计算机的负担。
<Button onClick={this.fn('e', '我是传递进去的参数')}>请点击</Button>
万万不能这样写!!!
热门文章
- 动物疫苗去哪里买便宜点 动物疫苗去哪里买便宜点呢
- 阿城区王允海动物医院电话是多少啊(王允海宠物医院怎么样)
- 免费V2Ray | 3月10日20.9M/S|免费Clash/V2ray/Shadowrocket/SSR免费节点订阅分享
- 开个宠物食品厂怎么样啊 开个宠物食品厂怎么样啊赚钱吗
- 小奶猫驱虫的正确方法(小奶猫驱虫的正确方法图片)
- 商标注册查询官网(天眼查商标注册查询官网)
- 猫三联三针一共多少钱(猫三联一针价格)
- 项目优化——路由懒加载
- 免费V2Ray | 3月5日18.9M/S|免费SSR/Shadowrocket/V2ray/Clash免费节点订阅分享
- 正则表达式规则以及贪婪匹配与非贪婪匹配