react 类组件的 this 指向

react 类组件的 this 指向

【引言】react 与原生的js很相近,其中许多问题也是js原生会碰到的问题,下面是一个this指向问题
【问题】React的类组件由React对其进行实例化,所以在React类组件内部的this指向都是当前组件的实例化对象。但是,在做事件处理的时候,类内部自定义的普通函数的this却又指向了undefined。

测试两个地方的调用有什么不同:

  1. 直接通过this调用
  2. 先绑定到 onClick 事件上然后再调用
import React from 'react'

export default class Bs extends React.Component {
// 首先在原型上定义了一个方法
  handleClick(){
    console.log(this);
  }

  render() {
    return (
      <div>
      {this.handleClick() }    // Bs
        <button
        onClick={this.handleClick}   // undefined
        >点击</button>
      </div>
    )
  }
}

可见:

  1. 直接通过this调用 ,返回 Bs实例
  2. 先绑定到 onClick 事件上然后再调用 , 返回undefined

知识讲解:

  1. 原生js:默认的reactthis指向当前实例对象,但是当将其中的方法赋值给一个‘变量’时,相当于onClick=function(){console.log(this)},此时this指向发生变化,指向window对象
  2. 但是在react中略有不同,凡是指向window对象的,一律转为undefined
    1. react的原理是:react开启了 js严格模式,而严格模式只有 匿名函数受影响,原本指向window的匿名函数,如今只能指向undefined

解决方案:
4. 绑定到方法的时候包一层箭头函数 this.handleClick.bind(this)
5. 通过bind改变this指向 handleClick = () => {}

如下:

import React from 'react'

export default class Bs extends React.Component {
  handleClick(){
    console.log(this);
  }
  render() {
    return (
      <div>
        <button
       // onClick={()=>{this.handleClick()}}
       // onClick={this.handleClick.bind(this)}
        >点击</button>
      </div>
    )
  }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值