Ich versuche, mich um die Syntax für Klassen in ES6 zu wickeln. Während gleichzeitig lernen Fabric native durch Bonnie Eisenmans Learning React Native.Bindungskontext beim Aufruf der ES6-Methode. Wie kann man auf ein Objekt innerhalb einer als Callback bezeichneten Methode zugreifen?
Ich bin über ein Problem beim Zugriff auf this
in einem Rückruf gekommen, wenn dieser Rückruf eine Klasse "Methode" ist. Ich bin mir bewusst, Probleme um lexikalische this
in Rückrufe wurden oft auf StackOverflow ausgelöst. Zum Beispiel in How to access the correct `this` context inside a callback?.
Basierend auf meinen Recherchen online bin ich auf eine Lösung gestoßen. Aber ich bin mir nicht sicher, ob das in ES6 der richtige Weg ist.
Mein Problem entstand, als ich versuchte, die folgenden unten:
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}/>
);
}
}
(Was ich habe nur etwas aus dem Beispiel in dem Buch modifiziert, um die ES6 Klasse Syntax entsprechen und die Import/Export-Syntax statt Require.)
Wenn ich dies tue, ist die this
in _handleTextChange
nicht definiert (Eigenschaft 'setState' von undefined kann nicht gelesen werden). Ich war davon überrascht. Aus anderen OO-Sprachen kommend, interpretiere ich, als ob diese Methode sich mehr wie eine statische Methode verhält.
Ich konnte dies lösen, indem ich die Klassenmethode überspringe und die Pfeilnotation verwende. onSubmitEditing={event => this.setState({name: event.nativeEvent.text})}
. Was gut funktioniert. Ich habe keine Probleme oder Verwirrung damit.
Ich möchte wirklich herausfinden, wie eine Klassenmethode aufgerufen wird. Nach ein wenig Forschung habe ich es geschafft, es zu tun, indem ich Folgendes mache: onSubmitEditing={this._handleTextChange.bind(this)}
. Vielleicht habe ich einen grundlegenden Aspekt von JavaScript missverstanden (ich bin ein Anfänger in JS), aber das scheint mir völlig verrückt zu sein. Gibt es wirklich keine Möglichkeit, von einer Methode aus auf den Kontext eines Objekts zuzugreifen, ohne das Objekt explizit an ... seine eigene Methode an dem Punkt zu binden, an dem es aufgerufen wird?
Ich habe auch versucht, var self = this;
im Konstruktor und Aufruf self.setState
in _handleTextChange
. Aber war nicht zu überrascht zu finden, dass das nicht funktioniert hat.
Was ist der richtige Weg für den Zugriff auf ein Objekt aus einer seiner Methoden, wenn es als Callback aufgerufen wird?
Alle möglichen Möglichkeiten sind in der Frage beschrieben, die Sie verknüpft haben. Man könnte argumentieren, dass der richtigste derjenige ist, der deine Absichten am deutlichsten zum Ausdruck bringt. –