React 中的this指向,获取方式.

// 需求.点击按钮的时候state里的arr++

export default class App extends React.Component {
  state = {
    arr: 18
  }
  handclick () {
  }
  render () {
    return (
      <>
        <button onClick={this.handclick}>按钮+1</button>
        <span>年龄:{this.state.arr}</span>
      </>
    )
  }
}

此时一般写法是在函数handclick 中输入

this.state.arr = this.state.arr + 1

但是在react中这里的this指向是undefined 所以需要以下方法获取到当前state.arr的值

方法1:

// 在点击按钮的时候调用这个函数.
// 函数触发以后return返回一个箭头函数.此时的箭头函数指向的是实例对象.
// 高阶函数.函数柯里化

export default class App extends React.Component {
  state = {
    arr: 18
  }
  handclick () {
    return () => {
      console.log(this.state.arr);//获得当前arr的值为18
    }
  }
  render () {
    return (
      <>
        <button onClick={this.handclick()}>按钮+1</button>
        <span>年龄:{this.state.arr}</span>
      </>
    )
  }
}

方法2: 推荐

缺点是无法传参,

// 通过赋值语句往实例上添加一个箭头函数

export default class App extends React.Component {
  state = {
    arr: 18
  }
  handclick = () => {
    console.log(this.state.arr);
  }
  render () {
    return (
      <>
        <button onClick={this.handclick}>按钮+1</button>
        <span>年龄:{this.state.arr}</span>
      </>
    )
  }
}

方法3.

xport default class App extends React.Component {
  constructor(){
    super()
    this.state = {
      arr: 18
    }
    this.handclick = this.handclick.bind(this)
  }
  handclick () {
    console.log(this);
  }
  render () {
    return (
      <>
        <button onClick={this.handclick}>按钮+1</button>
        <span>年龄:{this.state.arr}</span>
      </>
    )
  }
}

方法4

export default class App extends React.Component {
  state = {
    arr: 18
  }
  handclick () {
    console.log(this.state.arr);
  }
  render () {
    return (
      <>
        <button onClick={() => this.handclick()}>按钮+1</button>
        <span>年龄:{this.state.arr}</span>
      </>
    )
  }
}

方法5

bind所携带的this.指的就是实例,不代表参数.如果需要传参.可以继续添加.

如果需要匹配默认参数.比如event

则传  this.handclick.bind(this,a,b)

接handclick (a,b,e) {

     当e匹配不到参数传递的时候.就是默认的
    console.log(this);
  }

 
export default class App extends React.Component {
  state = {
    arr: 18
  }
  handclick () {
    console.log(this);
  }
  render () {
    return (
      <>
        <button onClick={this.handclick.bind(this)}>按钮+1</button>
        <span>年龄:{this.state.arr}</span>
      </>
    )
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值