私はES6でClassesの構文を頭の中に入れようとしています。同時に、Bonnie EisenmanのLearning React Nativeを通じてFabricネイティブを学習します。ES6メソッドを呼び出すときのコンテキストをバインドします。コールバックと呼ばれるメソッド内からオブジェクトにアクセスする方法
コールバックがクラス「メソッド」である場合、コールバックでthis
にアクセスするという問題が発生しました。私は、コールバックの字句this
の問題がStackOverflowで何度も発生していることを認識しています。たとえば、 How to access the correct `this` context inside a callback?です。
私の研究のオンラインに基づいて私は解決策を見つけました。しかし、私はこれがES6でそれを行う正しい方法であるとは確信していません。
私の問題は、私がしようとしたときに約来たの下に次:
私は少しだけES6クラスの構文とインポート/エクスポート構文の代わりに一致するように本の中の例から変更したclass WeatherProject extends Component {
constructor(props) {
super(props);
this.state = {
zip: ''
};
}
_handleTextChange(event) {
console.log(event.nativeEvent.text);
this.setState({zip: event.nativeEvent.text})
}
render() {
return (
<TextInput
style={styles.input}
onSubmitEditing={this._handleTextChange}/>
);
}
}
(
this
の_handleTextChange
は未定義です(未定義のプロパティ 'setState'は読み取れません)。私はこれに驚いた。他のオブジェクト指向言語から来ているように、私はこのメソッドが静的メソッドであるかのように動作しているかのように解釈しています。
私はクラスメソッドをスキップし、矢印の表記を使用してこれを解決できました。 onSubmitEditing={event => this.setState({name: event.nativeEvent.text})}
。どちらがうまくいくの?私はそれに問題や混乱はありません。
私は本当にクラスメソッドを呼び出す方法を実際に考え出したいと思います。かなりの研究の後、私はそれを次のようにすることによって動作させることができた:onSubmitEditing={this._handleTextChange.bind(this)}
。おそらく、私はJavaScriptの基本的な側面を誤解しています(私はJSの初心者です)。しかし、これは私にとっては全く狂っているようです。メソッド内からオブジェクトのコンテキストに実際にアクセスする方法はありませんか?オブジェクトを明示的にバインドせずに...それが呼び出された時点で独自のメソッドですか?
また、var self = this;
をコンストラクタに追加して、self.setState
を_handleTextChange
に呼び出してみました。しかし、あまりにも驚くべきことではないことが分かりました。
コールバックとして呼び出されたときに、メソッドの1つの中からオブジェクトにアクセスする正しい方法は何ですか?
すべての可能な方法はリンク先の質問に記載されています。あなたの意図を最もはっきりと表現するものが最も正しいと主張することができます。 –