In React wird EffectList durchlaufen, um Knotenoperationen, Lebenszyklusmethoden und Effektmethoden auszuführen. EffectList kann mit den bunten Lichtern verglichen werden, die an einem Weihnachtsbaum hängen, und dieser Weihnachtsbaum ist der Fiber-Baum. Warum gibt es EffectList? Beispielsweise gibt es in einem Fiber-Baum einige Fiber-Knoten, die die Methode EffectList löst dieses Problem. Wenn während der Konstruktion des Fiber-Baums das EffectList-Sammlung EffectList ist eine einseitig verknüpfte Liste. Der Aufbau des Fiber-Baums erfolgt tiefenorientiert, d. h., die untergeordneten Fiber-Knoten werden zuerst nach unten aufgebaut, und nachdem die untergeordneten Knoten aufgebaut sind, werden die übergeordneten Fiber-Knoten nach oben aufgebaut, sodass die untergeordneten Fiber-Knoten in der Effektliste immer vorne stehen. Der Vorgang zum Abschließen der Konstruktion des Fiber-Knotens wird in der Methode Der vereinfachte Code ist wie folgt. Funktion kompletteArbeitseinheit(Arbeitseinheit: Fiber): void { let abgeschlosseneArbeit = Arbeitseinheit; Tun { const current = abgeschlosseneArbeit.alternate; const returnFiber = abgeschlosseneArbeit.return; let next = kompletteArbeit(aktuell, kompletteArbeit, subtreeRenderLanes); // Effektlistenkonstruktion, wenn ( returnFiber !== null && (returnFiber.flags & Unvollständig) === NoFlags ) { // Schicht für Schicht kopieren if (returnFiber.firstEffect === null) { returnFiber.firstEffect = abgeschlosseneArbeit.firstEffect; } if (completedWork.lastEffect !== null) { // Dies bedeutet, dass der aktuelle Knoten ein Geschwisterknoten ist, der untergeordnete Knoten eine Auswirkung hat und returnFiber.lastEffect ein Wert zugewiesen wurde, wenn (returnFiber.lastEffect !== null) { // Auswirkung der Verbindung von Geschwisterknoten returnFiber.lastEffect.nextEffect = abgeschlosseneArbeit.ersterEffect; } returnFiber.lastEffect = abgeschlosseneArbeit.lastEffect; } const flags = abgeschlosseneArbeit.flags; // Dieser Faserknoten hat eine Wirkung if (flags > DurchgeführteArbeit) { // Der aktuelle Knoten hat einen Effekt, der mit der Effektliste verbunden ist if (returnFiber.lastEffect !== null) { returnFiber.lastEffect.nextEffect = abgeschlossene Arbeit; } anders { // Der Fall, in dem returnFiber nicht über firstEffect verfügt, ist das erste Mal, dass es auf einen Knoten mit dem Effekt returnFiber.firstEffect = completedWork trifft; } returnFiber.lastEffect = abgeschlossene Arbeit; } } // Geschwisterelemente durchlaufen und zum übergeordneten Element zurückkehren const siblingFiber = completedWork.sibling; if (geschwisterfaser !== null) { workInProgress = Geschwisterfaser; zurückkehren; } abgeschlosseneArbeit = returnFiber; workInProgress = abgeschlossene Arbeit; } während (abgeschlosseneArbeit !== null); } EffectList funktioniert tatsächlich wie eine Blase und sammelt Daten Schicht für Schicht bis zur oberen Schicht, beginnend beim ersten Knoten mit Wie in der folgenden Struktur, wenn jedes <div id="1"> <div id="4"/> <div id="2"> <div id="3"/> </div> </div> Die endgültige Effektliste ist ersterEffekt => div4 letzterEffekt => div1 Da der Fiber-Baum tiefenorientiert aufgebaut ist, führt alle Die EffectList-Durchquerung beginnt bei ersterEffekt => div4 div4.nextEffect => div3 div3.nextEffect => div2 div2.nextEffect => div1 Effektliste beim ersten Rendern In React gibt es eine Leistungsoptimierung für den ersten Mount, bei der die EffectList enthält nicht lass firstEffect; // Verbinde auch den Stammknoten finishedWork if (finishedWork.flags > PerformedWork) { if (fertigeArbeit.letzterEffekt !== null) { fertigeArbeit.letzterEffekt.nächsterEffekt = fertigeArbeit; ersterEffekt = fertigeArbeit.ersterEffekt; } anders { ersterEffekt = fertigeArbeit; } } anders { // Der Stammknoten hat keine Wirkung. ersterEffekt = fertigeArbeit.ersterEffekt; } Durchlaufen der EffektlisteEffectList wird hauptsächlich für die Ausführung von Lebenszyklusmethoden der Layoutphase und von DOM-Operationen verwendet. // getSnapshotBeforeUpdate verarbeiten und useEffect einplanen nächsterEffekt = ersterEffekt; Tun { commitBeforeMutationEffects(); } während (nächsterEffekt !== null); //DOM-Operation nextEffect = firstEffect; Tun { commitMutationEffects(root, renderPriorityLevel); } während (nächsterEffekt !== null); // Ausführung von Lebenszyklusmethoden nextEffect = firstEffect; Tun { commitLayoutEffects(Wurzel, Fahrspuren); } während (nächsterEffekt !== null); In diesen drei Methoden in der Layoutphase wird Zusammenfassen EffectList ist keine globale Variable. Während der Erstellung des Fiber-Baums werden Fiber-Knoten mit Da der Erfassungsprozess tiefenorientiert ist, werden die untergeordneten Elemente zuerst erfasst, sodass die untergeordneten Elemente während der Durchquerung zuerst bearbeitet werden. Wenn ein Interviewer also fragt, welcher der untergeordneten und übergeordneten Lebenszyklen oder Das Obige ist eine kurze Analyse der Details von EffectList in React. Weitere Informationen zu EffectList in React finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM! Das könnte Sie auch interessieren:
|
<<: So verwenden Sie eine Multi-Core-CPU, um Ihre Linux-Befehle zu beschleunigen (GNU Parallel)
>>: Beispielcode für die Django+MySQL-Konfiguration und einfache Bedienung der Datenbank
In diesem Artikel erfahren Sie, wie Sie mit Vue W...
Verwandte Artikel: Website-Design für Benutzererfa...
Der MySQL-Dienst wird gestartet, aber es kann kei...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Konfigurieren Sie node.js+nvm+...
Unabhängig davon, ob Sie ein Windows- oder Linux-...
Inhaltsverzeichnis Überblick Beispiel 1) Objekt e...
1) Geben Sie den Ordnerpfad ein, in dem die JDK-D...
Wichtige Daten müssen gesichert werden, und zwar ...
MySQL UTF-8-Kodierung MySQL unterstützt UTF-8 sei...
Notieren Sie den Fehler, der mich heute den ganze...
Tomcat unter Linux starten und herunterfahren Sta...
Vorwort HTTP ist ein zustandsloses Kommunikations...
Geben Sie zunächst einen Code ein für(int i=0;i&l...
Ich spiele in letzter Zeit mit Big Data. Ein Freu...