所以,假設我有一個名爲Search的類,它是一個帶有提交按鈕的簡單輸入字段。這是代碼。何時將此關鍵字綁定到事件處理函數中?
class Search extends Component {
constructor(props){
super(props);
this.state = {term: ''};
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
console.log(this);
console.log(e.target.value);
this.setState({term: e.target.value});
}
render() {
return (
<form className='input-group'>
<input className='form-control'
placeholder='City'
onChange={this.handleChange}
value={this.state.value}/>
<span className='input-group-btn'>
<button type='submit' className='btn btn-primary'>Submit</button>
</span>
</form>
)
}
}
所以,我需要到this
關鍵字綁定到事件處理程序,handleChange
,在類的構造函數內部,使得它具有handleChange
事件處理程序內的正確參考this
。
但是,如果我的代碼更改爲以下
class Search extends Component {
constructor(props){
super(props);
this.state = {term: ''};
//this.handleChange = this.handleChange.bind(this);
行註釋以上
}
handleChange(e) {
console.log(this);
console.log(e.target.value);
this.setState({term: e.target.value});
}
render() {
return (
<form className='input-group'>
<input className='form-control'
placeholder='City'
onChange={(e) => this.handleChange(e)}
線變化上面
value={this.state.value}/>
<span className='input-group-btn'>
<button type='submit' className='btn btn-primary'>Submit</button>
</span>
</form>
)
}
}
現在,如果我將代碼更改爲上述內容,則不再需要這樣做,因爲我正在從回調內調用this.handleChange。爲什麼會這樣?
如果您使用箭頭函數,那麼您不需要「綁定(this)」,這些函數[詞彙綁定此值](https://developer.mozilla.org/en/docs/Web/JavaScript/Guide/功能#Arrow_functions)。他們的這個價值永遠是一樣的,不管他們從哪裏來。 – ArneHugo
感謝@ArneHugo,我在部分帖子中提交了答案,同時隨時隨地提供了不規則連接。現在完整回答。 – Pineda