Heim > Artikel > Web-Frontend > Analyse der Gründe für die Bindung in React-Komponenten
Dieser Artikel teilt Ihnen mit, warum dies in die React-Komponentenmethode eingebunden werden sollte. Der Inhalt ist sehr gut. Ich hoffe, er kann allen helfen.
Wenn Sie versucht haben, React
für die Front-End-Entwicklung zu verwenden, müssen Sie den folgenden Code gesehen haben:
//假想定义一个ToggleButton开关组件 class ToggleButton extends React.Component{ constructor(props){ super(props); this.state = {isToggleOn: true}; this.handleClick = this.handleClick.bind(this); this.handleChange = this.handleChange.bind(this); } handleClick(){ this.setState(prevState => ({ isToggleOn: !preveState.isToggleOn })); } handleChange(){ console.log(this.state.isToggleOn); } render(){ return( <button onClick={this.handleClick} onChange={this.handleChange}> {this.state.isToggleOn ? 'ON':'OFF'} </button> ) } }
Warum müssen Sie dies an alle Instanzmethoden binden? im Konstruktor?
Das obige Beispiel ist nur die Definition einer Komponentenklasse, wenn sie in anderen Komponenten aufgerufen oder mit der Methode ReactDOM.render( )
gerendert wird Die Schnittstelle wird generiert, da die Komponente wiederverwendet werden kann und die objektorientierte Programmierung für ihre Positionierung sehr gut geeignet ist. Gemäß den Grundregeln , auf die this hinweist, können wir wissen, dass this
hier letztendlich auf die Instanz der Komponente verweist.
Wenn die Komponenteninstanz generiert wird, wird der Konstruktor constructor
ausgeführt. Hier konzentrieren wir uns auf die Analyse der folgenden Codezeile:
this.handleClick = this.handleClick.bind(this);
Zu diesem Zeitpunkt zeigt this
auf Anschließend sucht der Ausdruck auf der rechten Seite der Zuweisungsanweisung zunächst nach der Methode this.handleClick( )
(Suche von nah nach fern entlang der Prototypenkette). 🎜> Prototyp-Methode this.handleClick( )
finden Sie dann hier , wobei bind(this)
auf die neu generierte Instanz verweist, also nach der Berechnung des Ausdrucks auf der rechten Seite der Zuweisungsanweisung eine neue Methode Die Angabe von this
wird generiert und dann wird die Zuweisungsoperation ausgeführt, um die neu generierte Instanz zu generieren. Die Funktion wird dem this
-Attribut der Instanz zugewiesen, dem handleClick
Hier wird es direkt als Instanzattribut generiert. Zusammenfassend bewirkt die obige Anweisung Folgendes: handleClick
ändert die Prototypmethode in eine Instanzmethode handleClick( )
und zwingt das handleClick( )
in dieser Methode, auf das aktuelle Beispiel zu verweisen. this
-Methode zum Definieren von Komponenten React.createClass( )
V16 und höher wurde in dieser Version entfernt, und Sie können die Details dieser Methode sehen, indem Sie den Quellcode früherer Versionen lesen. React
//旧版本`react`中`createClass`方法片段 if (this.__reactAutoBindMap) { this._bindAutoBindMethods(); }In der alten Version von
können Sie den obigen Code in der Definition von React
sehen. Abgesehen von anderer komplexer Logik können Sie am Methodennamen erkennen, dass es sich um eine automatische Bindung handelt. Methode: Was in dieser Methode tatsächlich durchgeführt wird, ist die erzwungene Bindung von createClass()
an die benutzerdefinierte Methode in der Komponente. Interessierte Leser können den Quellcode für Details überprüfen. this
, dass die Schaltfläche ToggleButton
EINstate.isToggleOn
oder AUS anzeigen soll, sodass die Listener-Funktion dazu gezwungen wird Hier gebunden Es ist auch leicht zu verstehen, auf die aktuelle Instanz zu verweisen. this
4. Wenn dies
-Prototypmethode this
, aber dies scheint keine Auswirkungen zu haben. Wenn das this.handleClick( )
-Attribut im Konstruktor der aktuellen Komponente initialisiert wird, dann wenn die Prototypmethode Wird ausgeführt, erhält direkt das Instanz-Attribut . Wenn das Attribut state
nicht in der Konstruktion initialisiert ist (z. B. die UI-Komponente in React), bedeutet dies, dass die Komponente keinen eigenen Status hat Zu diesem Zeitpunkt scheint selbst der Aufruf der Prototyp-Methode keine Wirkung zu haben. this.state
state
state
Tatsächlich ist dies tatsächlich der Fall. Was
. bind(this)
Wenn Sie beispielsweise destrukturierende Zuweisung
const toggleButton = new ToggleButton(); import {handleClick} = toggleButton;Im obigen Beispiel Die erhaltene Destrukturierungszuweisung Diese Methode meldet einen Fehler, wenn sie ausgeführt wird. Das Innere der Klasse wird zur Ausführung im strengen Modus
gezwungen. Der handleClick
hier verliert seinen ursprünglichen Zeiger in der Zuweisung und zeigt darauf zur Laufzeit. und hat keine Attribute. this
undefined
Eine weitere Einschränkung besteht darin, dass die Antwortfunktion ohne Bindung undefined
bei asynchroner Ausführung Probleme verursachen kann. Wenn sie als Rückruffunktion an eine asynchrone Ausführungsmethode übergeben wird, geht sie aufgrund von
5. ZusammenfassungWenn es kein
this
gibt, das die Angabe der Komponenteninstanzmethode erzwingt, können Sie die Referenzkonvertierung oder nicht sicher als Rückruffunktion zum Übergeben von Bei der zukünftigen Verwendung ist dies für die spätere Verwendung und die gemeinsame Entwicklung unpraktisch.
ist sehr flexibel zu verwenden, aber diese Flexibilität bringt auch viel Verwirrung mit sich. Das this
bind(this) dient dazu, die Sprachfehler von JavaScript zu verbessern. Dieses Problem tritt bei der Verwendung von für Plug-Ins auf Die Auswirkungen dieses Problems werden bei der Entwicklung von Frameworks deutlicher sichtbar. Der Grund dafür, dass es sich um einen Fehler auf Sprachebene handelt, liegt darin, dass die Richtung von javascript
in Java
besser mit der normalen Denklogik im selben Szenario übereinstimmt und die Sprache, wenn die Bindung nicht in this
angezeigt wird Es werden Operationsergebnisse angezeigt. Die Benennung der Methode stimmt nicht mit der Bedeutung überein. javascript
Analyse der Gründe, warum Animationen in React nicht wirksam werden
Verwendung von Reagieren: Komponenten reagieren Interne Statusverwaltung
Das obige ist der detaillierte Inhalt vonAnalyse der Gründe für die Bindung in React-Komponenten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!