React-FasererstellungDie aktuelle React-Version basiert auf V17.0.2. Dieser Artikel stellt hauptsächlich die Erstellung der Faserstruktur vor. 1. Bevor Sie beginnenDies ist mein persönliches Verständnis. Wenn etwas falsch ist, weisen Sie mich bitte darauf hin. Zuerst müssen Sie die React-Debugger-Entwicklungsumgebung konfigurieren. Der Eintrag ist hier: github Führen Sie „npm run i“ aus, um Abhängigkeiten zu installieren, und „npm start“, um die Umgebung auszuführen. 2. Beginnen Sie mit React.renderAktivieren Sie Debug und zeigen Sie den React-Aufrufstapel an, indem Sie React.render beim Projekteinstieg aufrufen. const root = document.getElementById('root'); ReactDOM.render( <Reagieren.StrictMode> <App /> </React.StrictMode>, Wurzel ); Nachdem React „render“ aufgerufen hat, ruft es „legacyRenderSubtreeIntoContainer“ auf, nachdem die Basiskonfiguration übergeben wurde. Exportfunktion rendern( Element: React$Element<beliebig>, Container: Container, Rückruf: ?Funktion, ) { // Etwas Umgebungscode entfernen // ... returniere legacyRenderSubtreeIntoContainer( null, Element, Container, FALSCH, Rückruf, ); } Nachdem React „render“ aufgerufen hat, ruft es „legacyRenderSubtreeIntoContainer“ auf, nachdem die Basiskonfiguration übergeben wurde. Exportfunktion rendern( Element: React$Element<beliebig>, Container: Container, Rückruf: ?Funktion, ) { // Etwas Umgebungscode entfernen // ... returniere legacyRenderSubtreeIntoContainer( null, Element, Container, FALSCH, Rückruf, ); } legacyRenderSubtreeIntoContainer macht insgesamt zwei Dinge: Das eine ist das Generieren von fiberRoot, das andere ist das Aufrufen von updateContainer. Geben Sie die Funktion legacyCreateRootFromDOMContainer ein, um zu sehen, wie fiberRoot generiert wird. Innerhalb der Funktion wird createLegacyRoot aufgerufen und hier unterscheiden wir, ob Hydrate verwendet werden soll, wie folgt: returniere createLegacyRoot( Container, sollteHydrieren ? { Hydrat: wahr, } : undefiniert, ); Für createLegacyRoot wird es zum Instanziieren der Funktion ReactDOMLegacyRoot verwendet. Durch nachfolgende Aufrufe gelangt es schließlich zur Root-Generierung, ruft die Funktion createRootImpl auf und instanziiert den Root. Geben Sie die Funktion createFiberRoot ein und initialisieren Sie FiberRootNode. Funktion FiberRootNode(ContainerInfo, Tag, Hydrat) { this.tag = Tag; // Typ this.containerInfo = ContainerInfo; // Container dies.pendingChildren = null; dies.aktuell = null; this.pingCache = null; dies.fertigeArbeit = null; this.timeoutHandle = keinTimeout; dieser.Kontext = null; this.pendingContext = null; dies.hydrate = Hydrat; this.callbackNode = null; this.callbackPriority = KeineLanePriority; this.eventTimes = createLaneMap(KeineFahrspuren); this.expirationTimes = createLaneMap(Kein Zeitstempel); this.pendingLanes = KeineLanes; this.suspendedLanes = KeineLanes; this.pingedLanes = KeineLanes; this.mutableReadLanes = KeineLanes; this.finishedLanes = KeineLanes; this.entangledLanes = KeineLanes; dies.entanglements = createLaneMap(KeineLanes); // .... } Es gibt hier mehrere Arten von Tags. Exporttyp RootTag = 0 | 1; Die obige Struktur ist der FiberRootNode-Knoten. Wenn rootTag gleich 0 ist, stellt es den Legacy-Rendering-Modus dar, und wenn es gleich 1 ist, stellt es das Rendering im Concurrent-Modus dar. Das heißt, traditionell verwenden wir React.render zum Rendering, und wenn React.createRoot aufgerufen wird, wechselt es in den Rendering-Modus im Concurrent-Modus, also paralleles Rendering. Schauen wir uns nun die Struktur der Faser an. const uninitializedFiber = createHostRootFiber(tag, strictModeLevelOverride); root.current = nicht initialisierte Faser; uninitializedFiber.stateNode = root; uninitializedFiber ist die Instanz des erstellten FiberNode. const createFiber = Funktion( Tag: WorkTag, pendingProps: gemischt, Schlüssel: null | Zeichenfolge, Modus: TypeOfMode, ): Faser { // $FlowFixMe: die Formen sind hier exakt, aber Flow mag keine Konstruktoren gibt neuen FiberNode (Tag, pendingProps, Schlüssel, Modus) zurück; }; Durch die grundlegende Erstellung wird die FiberNode-Struktur wie folgt generiert Funktion FiberNode( Tag: WorkTag, pendingProps: gemischt, Schlüssel: null | Zeichenfolge, Modus: TypeOfMode, ) { // Instanz this.tag = tag; //Komponententyp this.key = key; //Schlüsselattribut this.elementType = null; //Elementtyp, Klassenfunktion, Anzeigeklasse, div-Anzeige div this.type = null; //Funktion oder Klasse this.stateNode = null; //Dom-Knoten // Fiber this.return = null; //Zeigt auf den übergeordneten Knoten this.child = null; //Zeigt auf den untergeordneten Knoten this.sibling = null; //Geschwisterknoten this.index = 0; // dies.ref = null; this.pendingProps = pendingProps; // Warte auf Eigenschaften pendingProps this.memoizedProps = null; //Speichereigenschaften, normalerweise werden Props gespeichert this.updateQueue = null; //Warteschlange aktualisieren this.memoizedState = null; //Status allgemein speichern diese.Abhängigkeiten = null; dieser.Modus = Modus; // Zugehörige Effekte this.flags = NoFlags; this.subtreeFlags = KeineFlags; diese.deletions = null; this.lanes = KeineLanes; this.childLanes = KeineLanes; this.alternate = null; //zeigt auf workInProgress } Die grundlegende Darstellung von FiberNode ist wie oben. Die grundlegenden Typen von Elementtyp und Typ sind Funktion und Klasse. Durch Vergleichen der FiberRootNode-Struktur mit dem folgenden Code wird die endgültige FiberNode-Struktur generiert. rendern() { const { Name, Anzahl } = dieser.Zustand; zurückkehren ( <div Klassenname="App"> <Schaltflächenname={name} /> { zählen } </div> ); } ReactDOM.render( <Reagieren.StrictMode> <App /> </React.StrictMode>, Wurzel ); Durch die abschließende Ausführung wird die FiberRoot-Verknüpfungslistenstruktur generiert. Abschließend wird zum Rendern unbatchedUpdates aufgerufen. Geben Sie die Funktion updateContainer ein. unbatchedUpdates(() => { // Container aktualisieren UpdateContainer (untergeordnete Elemente, FiberRoot, übergeordnete Komponente, Rückruf); }); 3. EndeOben sind die Einzelheiten der Schritte zum Erstellen der React Fiber-Struktur aufgeführt. Weitere Informationen zum Erstellen der React Fiber-Struktur finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So gehen Sie mit der Meldung „Vorgang nicht zulässig“ beim Löschen von Dateien in Linux um
Nginx verwendet reguläre Ausdrücke, um Platzhalte...
Docker Toolbox ist eine Lösung zur Installation v...
Dieser Fall basiert auf dem CentOS 7-System Geeig...
Vorwort Wenn sich unser Geschäft in einem sehr fr...
Inhaltsverzeichnis 1. Grundlegende Konzepte 1.1 Z...
MySQL richtet eine unabhängige Schreibtrennung ei...
In diesem Artikelbeispiel wird der spezifische Ja...
Inhaltsverzeichnis Frage Hintergrund Idee & U...
Anweisungen zur MySQL-Installation MySQL ist ein ...
Die Datenbank fragt ab, welches Objekt welche Fel...
In diesem Beitrag verwenden wir die Pseudoklasse ...
Löschen einer einzelnen Tabelle: LÖSCHEN AUS Tabe...
Bevor wir über OO, Entwurfsmuster und die vielen o...
Titel XML/HTML-CodeInhalt in die Zwischenablage k...
mysql-5.7.17.msi Installation, folgen Sie den Scr...