Heim > Web-Frontend > js-Tutorial > Warum ist „this.setState' undefiniert oder keine Funktion in meinem React-Ereignishandler?

Warum ist „this.setState' undefiniert oder keine Funktion in meinem React-Ereignishandler?

DDD
Freigeben: 2024-12-18 08:27:11
Original
727 Leute haben es durchsucht

Why is `this.setState` undefined or not a function in my React event handler?

Zugriff auf die React-Instanz (dies) im Event-Handler

Problem:

Beim Versuch Aktualisieren Sie den React-Status mithilfe von this.setState innerhalb eines Event-Handlers. Möglicherweise treten Fehler wie "Kann nicht" auf Eigenschaft 'setState' von undefiniert lesen oder „this.setState ist keine Funktion“. Dies weist darauf hin, dass dieses Schlüsselwort nicht auf die Komponenteninstanz im Ereignishandler verweist.

Erklärung:

In ES6 React-Komponenten sollten an die Komponente gebundene Funktionen darin definiert werden den Konstruktor oder explizit in der Render-Methode mit this.methodName.bind(this) gebunden. Dies liegt daran, dass die JavaScript-Pfeilfunktionssyntax (z. B. () =>) einen neuen Funktionsumfang erstellt und diesen nicht automatisch an die Komponente bindet.

Lösung:

Methode 1 (Einbinden Konstruktor):

constructor(props) {
  super(props);
  this.state = { inputContent: 'startValue' };
  this.changeContent = this.changeContent.bind(this); // Binding here
}
Nach dem Login kopieren

Methode 2 (Bindung im Rendering):

render() {
  return (
    <input onChange={this.changeContent.bind(this)} />
  );
}
Nach dem Login kopieren

Hinweis: Bei Verwendung von React. createClass, alle Methoden werden automatisch an die Komponenteninstanz gebunden.

Zusätzlich Korrektur:

In Ihrem Code sollte React.refs.someref durch this.refs.someref ersetzt werden, um auf die React-Elementreferenz zuzugreifen. Außerdem muss die sendContent-Methode mithilfe einer der oben genannten Bindungsmethoden an die Komponente gebunden werden.

Das obige ist der detaillierte Inhalt vonWarum ist „this.setState' undefiniert oder keine Funktion in meinem React-Ereignishandler?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage