事件綁定各種寫法分析
一、
class Son extends React.Component{
addN(){
this.setState({n: this.state.n + 1})
}
render(){
return <button onClick={()=>this.addN()}>n+1</button>
// 或
// <button onClick={this.addN.bind(this)}>n+1</button>
}
}
以上寫法要綁定this (箭頭函數this本身就不可變),否則會導致函數里面的this變成window
原因:
<button onClick={this.addN}>n+1</button>
使用以上寫法React會調用button.onClick.call(null,event),此時傳的this是null,相當于this是window
二、
class Son extends React.Component{
constructor(){
super()
this.addN= () => this.setState({n: this.state.n + 1});
}
render(){
return <button onClick={this.addN}>n+1</button>
}
}
這上下兩種寫法等價,這兩種寫法不用綁定this,原因如下圖
class Son extends React.Component{
addN= () => this.setState({n: this.state.n + 1});
render(){
return <button onClick={this.addN}>n+1</button>
}
}
類的this指向類的this.png