React笔记之事件绑定的写法

类组件的事件绑定

  1. <button onClick={() => this.addN()}>n+1</button>

    这种写法是正常的,传一个函数给onClick即可,注意大小写。

  2. <button onClick={this.addN}>n+1</button>

    这种写法是错误的,这样会使得 this.addN 里的 this 变成 window ,

    下面我们换几种正确的写法

    1. <button onClick={this.addN.bind(this)}>n+1</button>

      这样写就可以了,这样就把this绑定为当前的this,而不会变成window了。

    2. 给箭头函数取一个名字,

    this._addN = () => this.addN()

    然后

    <button onClick={this._addN}>n+1</button>

    即可。

    1. 直接将 addN 改为箭头函数
    constructor() {
        this.addN = () => this.setState({n: this.state.n + 1})
    }
    render() {
        return <button onClick={this.addN}>n+1</button>
    }
    
    1. 最终写法

      直接在类组件中写

      addN = () => this.setState({n: this.state.n + 1})

      render() {
          return <button onClick={this.addN}>n+1</button>
      }
      

写法之间的区别

写法一:

class Son extends React.Component {
	addN = () => this.setState({n: this.state.n + 1}) // 这种写法等价于下面的写法,这里少写了一个this
  constructor() {
  	this.addN = () => this.setState({n: this.state.n + 1}) // 与上面的写法相等
  }
}

写法二:

class Son extends React.Component {
	//与下面的写法相同
	addN() {
  	this.setState({n: this.state.n + 1})
  }
  //与上面的写法相同
  addN: function() {
  	this.setState({n: this.state.n + 1})
  }
}

写法一的区别和写法二的区别在于,一的方法是挂在对象上的,二的方法是挂在原型上的,下面我们来验证一下:

写法一直接把方法用箭头函数写时,new 一个对象出来时,方法是直接挂在对象上的,下图见证:

写法二直接把方法写在类里,new 一个对象出来时,方法是直接挂在原型链上的,下图见证:

写法一的this是不可变的,一直指向创建的对象,写法二的this由调用者决定,可能变成其他的对象,

因为函数箭头不接受this,也就是上面的说法,只属于创建它的对象。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值