1. React Hooks vs. reine FunktionenUm es einfach auszudrücken: React Hook sind einige neue APIs, die in React V18.6 hinzugefügt wurden. Das Wesentliche der API besteht darin, eine Funktionsschnittstelle für bestimmte Funktionen bereitzustellen. Daher sind React Hooks Funktionen, aber keine reinen Funktionen. Was ist eine reine Funktion? Das heißt, diese Funktion muss bei gleichem Eingabewert die gleiche Ausgabe erzeugen und darf keine Auswirkungen auf externe Daten haben. Die von React Hooks bereitgestellte funktionale API ist keine reine Funktion. Was also macht React Hooks zu keinen reinen Funktionen? Tatsächlich wird es durch das React-Framework und die Funktionskomponente selbst bestimmt. Wir wissen, dass das Prinzip des React-Seiten-Renderings darin besteht, bei jedem Rendering einen neuen virtuellen DOM zu erhalten und dann zum Rendering der Seite einen DOM-Diff durchzuführen. Die Funktionskomponente von React erhält durch Ausführung der gesamten Funktion einen virtuellen DOM. Daher werden bei jedem Rendern der Seite alle Anweisungen innerhalb der Funktionskomponente erneut ausgeführt. Wenn die innerhalb der Funktionskomponente verwendeten React Hooks reine Funktionen sind, erhalten Sie nach jedem Rendering keinen anderen virtuellen DOM. React legt fest, dass alle React-Komponenten reine Funktionen sein müssen und dass es ihnen untersagt ist, ihre eigenen Eigenschaften zu ändern. Daher konnten Funktionskomponenten vor React V16.8, als React Hooks noch nicht veröffentlicht waren, da es sich um reine Funktionen handelte, nur einen festen virtuellen DOM zurückgeben, keine Zustände enthalten und keine Lebenszyklusmethoden unterstützen. Aus diesem Grund wurden zu diesem Zeitpunkt nur Funktionskomponenten unterstützt. Allerdings waren Funktionskomponenten im Vergleich zu Klassenkomponenten zu vielen Einschränkungen unterworfen. Funktionskomponenten konnten Klassenkomponenten weder ersetzen, noch waren sie so einfach zu verwenden wie Klassenkomponenten. React möchte, dass Komponenten einfach und nicht komplex sind. React ist der Ansicht, dass Komponenten am besten mit Funktionen und nicht mit Klassen geschrieben werden sollten. Aus diesem Grund hat React React Hooks hinzugefügt. Hook bedeutet Hook, der von React für Funktionskomponenten bereitgestellt wird, um externe Funktionen und Datenstatus bei Bedarf „einzuhaken“, wodurch Funktionskomponenten verbessert werden und sie Klassenkomponenten vollständig ersetzen können. Die Funktionskomponenten von React können nur reine Funktionen sein. Daher wird die Aufgabe, beim erneuten Rendern der Funktionskomponenten bei jedem Auftreten eines Ereignisses einen anderen virtuellen DOM zu erhalten, vollständig React Hooks überlassen. Wie macht React Hooks das also? Als nächstes implementieren wir manuell einen useState. Die spezifischen Details von useState sind definitiv unterschiedlich, aber die Prinzipien und Ideen sind dieselben. 2. Einfaches myUseState Bei der ersten Ausführung von React.useState wird einem _state der Anfangswert zugewiesen, und bei jedem nachfolgenden erneuten Rendern wird der Wert von _state gelesen. Was setState in [state, setState] macht, ist, den Wert von _state zu ändern und dann die Seite erneut zu rendern. importiere React von „react“; importiere ReactDOM von „react-dom“; lass _state Funktion meinUseState(Anfangswert){ wenn(_state === undefiniert){ _state = Anfangswert } const setState = (neuerWert)=>{ _state = neuerWert machen() } return [_state, setzeState] } Funktion rendern(){ ReactDOM.render(<App/>,document.getElementById('root')); } Funktion App(){ const [n, setN] = meinNutzungszustand(0) zurückkehren ( <div> n: {n} <button onClick={() => setN(n+1)}>+1</button> </div> ) } ReactDOM.render(<App/>,document.getElementById('root')); 3. myUseState verbessern Der oben implementierte myUseState hat einen Fehler. Wenn myUseState zweimal in einer Funktionskomponente verwendet wird, tritt ein Problem auf. Die beiden teilen sich denselben _state, was zu Verwirrung führt. importiere React von „react“; importiere ReactDOM von „react-dom“; lass _state = [] lass Index = 0 Funktion meinUseState(Anfangswert){ Konstant aktuellerIndex = Index wenn(_state[currentIndex] === undefiniert){ _state[aktuellerIndex] = Anfangswert } const setState = (neuerWert)=>{ _state[aktuellerIndex] = neuerWert machen() } Index++ return [_state[aktuellerIndex], setzeStatus] } Funktion rendern(){ Index = 0 ReactDOM.render(<App/>,document.getElementById('root')); } Funktion App(){ const [n, setN] = meinNutzungszustand(0) const [m, setM] = meinUseState(0) zurückkehren ( <div> n: {n} <button onClick={() => setN(n+1)}>+1</button> <br/> m: {m} <button onClick={() => setM(m+1)}>+1</button> </div> ) } ReactDOM.render(<App/>,document.getElementById('root')); 4. Hook-Regeln werden durch Implementierungsprinzipien ausgelöst Der oben implementierte myUseState ist definitiv nicht der spezifische Implementierungscode von React.useState, aber das Implementierungsprinzip ist dasselbe. Die Funktion myUseState kapselt den Datenstatus innerhalb der Funktionskomponente und verwaltet den Status, indem sie die relevante Betriebsschnittstelle für die Verwendung durch die Funktionskomponente verfügbar macht. Aus den oben genannten Implementierungsideen können wir erkennen, dass die Implementierung von React Hooks tatsächlich eine spezielle Funktion ist, die auf globalen Variablen und Abschlussprinzipien basiert. Gerade aufgrund dieser Implementierungsmethode ist die Verwendung von React Hooks jedoch darauf beschränkt, Hooks nur auf der obersten Ebene aufzurufen, was bedeutet, dass Hooks nicht in Schleifen, Bedingungen oder verschachtelten Funktionen aufgerufen werden sollten. Wenn Hooks in if-Bedingungsanweisungen verwendet werden, ist die Anzahl der Ausführungen der React.useState-Anweisung bei jedem Rendern der Komponente falsch, was die Indexzählung durcheinander bringt und zu Datenwartungsfehlern führt. Das obige Implementierungsprinzip basiert auf der korrekten Zählung der Indizes, daher verlässt sich React auf die Reihenfolge, in der Hooks aufgerufen werden. Oben finden Sie eine ausführliche Erklärung zur Funktionsweise von React Hooks. Weitere Informationen zu React Hooks finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: Verwenden einer MySQL-Datenbank mit Python 3.4 unter Windows 7
>>: Django verwendet Pillow, um einfach eine Verifizierungscodefunktion einzurichten (Python)
Inhaltsverzeichnis 1. Überprüfen Sie die Anzahl d...
Nachdem der Server, auf dem sich Docker befindet,...
Gestalten Sie die oben gezeigte Webseite: <!DOC...
Vorwort Da immer wieder Fehler auftreten, protoko...
Inhaltsverzeichnis Lösung 1: Kopieren Sie die Übe...
Problembeschreibung Kürzlich meldete ein Host die...
Ich habe zufällig ein tolles Tutorial zum Thema k...
Lassen Sie mich mit einer Frage beginnen: Wenn Si...
Spring-Integration mit SpringMVC Die web.xml-Konf...
Inhaltsverzeichnis einführen Implementierungsschr...
Grundlegende Umgebungskonfiguration Bitte kaufen ...
Inhaltsverzeichnis iview-admin2.0 integrierte Ber...
Heute stellen wir mehrere Möglichkeiten vor, mit ...
In diesem Artikel werden hauptsächlich die Konfig...
Dieser Artikel basiert auf der CentOS 7.3-Systemu...