Ich mache jetzt Tutorial, und wundere mich über die Bindung in Ajax Anruf. Warum müssen wir dies für Erfolg und Fehler im Ajax-Aufruf binden? Anscheinend, wenn ich Bindung lösche, wirft die Funktion einen Fehler. Verwenden wir bindend, weil wir this.setState
in der Funktion haben und eine richtige Referenz benötigen?
this
bezieht sich auf das Objekt, das die Funktion aufgerufen hat. bind
's erstes Argument ist der Wert von this
. Also function(data){...}.bind(an_object)
kann gelesen werden als "rufe diese Funktion auf, aber setze this
in der Funktion auf an_object
" . Im Fall des React-Lernprogramms bezieht sich an_object
auf die React-Komponente. Also:
this
bezieht sich auf das AJAX-Objekt. console.log(this)
gibt uns
this
bezieht sich auf die React-Komponente. console.log(this)
gibt uns
Für eine weitere Lektüre erklärt Nicholas Zakas Buch Objektorientiertes JavaScript ausführlich, wie bind
funktioniert.
Oh, ich habe es herausgefunden! Nach dem Verwenden des Dev-Tools zum Überprüfen des "readClass.createClass.Constructor" . Der Grund, dies im Erfolg und Fehler des Ajax-Aufrufs zu binden, besteht darin, sicherzustellen, dass wir das richtige "Dies" haben, wenn wir this.setState({data:data});
oder console.error(this.props.url, status, err.toString());
Wenn wir "das" nicht binden. wir haben das richtige Reaction "this" verloren, und "this" könnte in jedem Moment Fenster, jQuery oder anderes werden. Das ist der Grund, warum wir den Fehler "Uncaught TypeError: undefined ist keine Funktion" erhalten haben.