だから、送信ボタン付きの単純な入力フィールドであるSearchという名前のクラスがあるとします。ここにそのコードがあります。このキーワードをいつreactのイベントハンドラにバインドするか?
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>
)
}
}
だから、私はそれがhandleChange
イベントハンドラ内this
への正しい参照を持つように、クラスのコンストラクタ内で、イベントハンドラ、handleChange
にthis
キーワードをバインドする必要があります。しかし
、私は
value={this.state.value}/>
<span className='input-group-btn'>
<button type='submit' className='btn btn-primary'>Submit</button>
</span>
</form>
)
}
}
上記
}
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)}
ラインの変更の上に次の
class Search extends Component { constructor(props){ super(props); this.state = {term: ''}; //this.handleChange = this.handleChange.bind(this);
行コメントにコードを変更した場合
コードを上記に変更すると、コールバックの内部からthis.handleChangeを呼び出すため、これを行う必要はありません。これはなぜですか?
arrow関数を使用する場合、[この値を字句的にバインドする](https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/関数#Arrow_functions)。彼らの 'this'値はどこから呼ばれても常に同じです。 – ArneHugo
ありがとう@ArneHugo、私はパッチのような接続で外出中に部分的な投稿で回答を提出しています。今すぐ完全に答えてください。 – Pineda