JavaScript

react绑定事件你真的会写吗

2018-12-28  本文已影响0人  evilGenuis_9527

使用react肯定会用到绑定事件。
绑定事件又有很多种写法,你之前的写法真的正确吗。

在render方法里绑定

doSomething(e){
  ...
}
render(){
return(
<div> 
  <span>{this.state.name}</span> 
  <a onClick={this.doSomething.bind(this)}></a>
</div>)
}

当然这种写法可以正常运行,但是当this.state.name改变的时候,这个组件会重新渲染。span会重新渲染,这是大家都知道的。
那么,a标签会重新渲染吗?
每次render()后,this.doSomething.bind(this)都会返回一个新的函数,react监听到绑定事件发生变化,a标签页会重新渲染。

在构造函数中绑定

  constructor() {
    this.doSomething = this.handleClickFunc.bind(this);
  }
doSomething(e){
  ...
}
return(
<div> 
  <span>{this.state.name}</span> 
  <a onClick={this.doSomething}></a>
</div>)
}

这种绑定方式在构造函数中绑定this,构造函数只会调用一次,这种写法每次render()方法调用不会重新渲染a标签.

使用箭头函数

doSomething=(data,e)=>{
  ...
}
return(
<div> 
  <span>{this.state.name}</span> 
  <a onClick={(e)=>this.doSomething(data,e)}></a>
</div>)
}

使用箭头函数同样在render()方法后不会重新渲染a标签

上一篇下一篇

猜你喜欢

热点阅读