React 绑定事件为什么会丢失this? 和如何解决绑定事件this指向问题

React 绑定事件为什么会丢失this?
先来看一个小案例

我们先来定义一个类 Test

  class Test{
    fun(){
        console.log("test")
    }
    demo(){
        console.log(this)
       console.log("demo")
    }
}
console.log(Test.prototype)
    var t = new Test()

然后我们在fun当中调用demo方法并且赋值给变量sum然后我们再调用sum

  class Test{
    fun(){
        console.log("test")
        var sum = this.demo
        sum()//打印结果为undefind 
    
    }
    demo(){
        console.log(this)
       console.log("demo")
    }
}
console.log(Test.prototype)
    var t = new Test()
    t.fun()

打印结果如下
在这里插入图片描述
此时我们发现在fun()当中调用的demo的this打印出来的为undefind
然后我们试一试直接调用demo看看打印出来的结果是什么
在这里插入图片描述

打印结果如下
在这里插入图片描述
而当我们直接调用demo方法的时候此时的demo的this却是指向了实例对象
说明我们是在将demo方法赋值给sum的时候this丢失了
得出结论
正常情况下tihs都指向window而class里面只能指向class不能指向window当this向发生改变不指向class时指向就会丢失就成了未定义
解决方法
和在react里一样在constructor里使用bind()来改变demo的this指向

此时就有人会问了 这些个和react的事件函数为什么要改变this指向有什么关系嘛?
我们知道jsx的原理本质上是React.createElement()
而React.createElement()有三个参数
第一个参数html标签的名字
第二个参数是传入的标签属性 传入的属性是以键值对的格式传入
第三个属性是节点要显示的内容
所以在第二个参数传入标签属性的时候 就相当于上面案例里的赋值 所以就这这时this就丢失了

解决方法
1.使用箭头函数:由于箭头函数的特性在箭头函数内的this即是指向当前对象的上下问 所以使用箭头函数可以解决
2. 使用在绑定事件时使用bind(this)改变this指向
3.在constructor里使用bind()来改变事件对象的this指向

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值