React DVA-Implementierungscode

React DVA-Implementierungscode

dva

dva ist eine Datenflusslösung, die auf Redux und Redux-Saga basiert. Um die Entwicklungserfahrung zu vereinfachen, verfügt dva auch über integrierte React-Router und Fetch, die in ein leichtes Anwendungsframework umgewandelt werden können.

Bildbeschreibung hier einfügen

Verwendung von dva

Bildbeschreibung hier einfügen

Definieren Sie ein Modell, ähnlich wie Redux-Toolkit.
Verwenden Sie connect

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Verbinden Sie sich wie bei Redux.

Bildbeschreibung hier einfügen

Start-up.
Anschließend erfahren Sie, wie Sie Aktionen versenden.

Bildbeschreibung hier einfügen

Suchen Sie anhand der entsprechenden Anleitung das passende Reduzierstück heraus und versenden Sie es.

Bildbeschreibung hier einfügen

Dies ist die grundlegende Funktionsweise von dva, die relativ einfach zu verwenden ist.

Implementierung von DVA

Idee: Eine Funktion kapseln, einen Speicher erstellen, Reduzierer und Zustände über Modelle sammeln und den Methodennamen in Reduzierern ändern.

Bildbeschreibung hier einfügen

Zunächst das Modell. Da es mehrere Modelle gibt, müssen wir sie sammeln.

Bildbeschreibung hier einfügen

Ändern Sie zunächst den Methodennamen in Rducer über Namespace.

Bildbeschreibung hier einfügen

Dann speichern Sie es.

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Dann kann es über den Provider eingefügt werden.

Bildbeschreibung hier einfügen

Transformieren Sie den Reduzierer des Modells und geben Sie den von Redux akzeptierten Reduzierer zurück. Zu diesem Zeitpunkt ändert sich der Status des Modells nicht. Es ist nur der Anfangszustand. Was die Komponente tatsächlich akzeptiert, ist der Status in Redux.
Dieser getReducer wird nur einmal aufgerufen, um den echten Reducer zurückzugeben.

Bildbeschreibung hier einfügen

Erste Implementierung abgeschlossen.

Unterstützt asynchrone

Dva ist in Redux-Saga integriert, daher ist die Verwendung ähnlich.

Bildbeschreibung hier einfügen

Beim Erstellen eines Modells können Sie durch Effekte eine Saga-Middleware erstellen. Versenden Sie dann die entsprechende Aktion

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

erreichen

Idee: Verarbeiten Sie die Effekte jedes Modells, konvertieren Sie sie in entsprechende Saga-Funktionen, verwenden Sie takeEvery, um auf jeden Attributnamen zu hören (z. B. asyncADD, konvertiert in takeEvery('asyncADD', ()=>{}) usw.), erstellen Sie dann eine Middleware über createSagaMiddleware, das von redux-saga bereitgestellt wird, und verwenden Sie die run-Methode, um die aus den Effekten in jedem Modell konvertierten Saga-Funktionen auszuführen.
Code:

Bildbeschreibung hier einfügen

Verwenden Sie getSagas, um die Effekte jedes Modells zu transformieren und sie in einem Array zu speichern. Führen Sie sie dann nacheinander durch forEach aus.
Erfahren Sie, wie Sie konvertieren

Bildbeschreibung hier einfügen

Es ist ersichtlich, dass die Auswirkungen jedes Modells in getSaga in die Funktion * () {} umgewandelt werden. Anschließend werden die Auswirkungen eines einzelnen Modells durchlaufen und jedes Attribut von * asyncADD () {} verarbeitet, wie in der Abbildung gezeigt. Eine Saga-Funktion wird über getWatcher zurückgegeben und ein untergeordneter Prozess wird über Fork gestartet, wodurch der Betrieb des Hauptprozesses nicht beeinträchtigt wird.

Bildbeschreibung hier einfügen

Jeder getWatcher gibt eine Saga-Funktion (Generatorfunktion) zurück, die das aktuelle Attribut (Schlüssel) über takeEvery überwacht und die nachfolgenden Effekte ausführt. Hier müssen wir die Put-Methode der Redux-Saga ändern, damit sie eine gewisse Präfixtyp-Logik separat ausführt.
Dies ist im Grunde erledigt. Die Effekte jedes Modells werden von der Saga-Funktion verarbeitet, um ausgeführt zu werden, und jede Methode der Effekte wird in einen Schlüssel umgewandelt und über takeEvery abgehört. Auch hier müssen Sie jedem Methodennamen des Effekts ein Präfix hinzufügen

Bildbeschreibung hier einfügen

So wird es gemacht.

Bildbeschreibung hier einfügen

Es kann normal laufen.

Implementierung des Routers

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Es gibt keinen Unterschied bei der Verwendung
dva erbt den Connected-React-Router

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Die Verwendung ist also ähnlich. Beachten Sie, dass asynchrone Logik nur in Effekten geschrieben werden kann. Reducer ist synchron und kann nicht weiter versenden.

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

erreichen:

Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen
Bildbeschreibung hier einfügen

Basierend auf connectd-react-router

Bildbeschreibung hier einfügen

Wissen Sie noch, wie Sie connectd-react-router verwenden? Der erste Schritt besteht darin, ein Routerobjekt zu erstellen.

Bildbeschreibung hier einfügen

Der zweite Schritt besteht darin, Middleware zu verwenden.

Bildbeschreibung hier einfügen

Übergeben Sie die API als Parameter an app._router. Das ist es.

Bildbeschreibung hier einfügen

Wenn er einen Push sendet, wird dieser von der Routing-Middleware abgefangen und verarbeitet und auf eine andere Seite weitergeleitet.

Dies ist das Ende dieses Artikels über die Implementierung von React DVA. Weitere relevante Inhalte zur Implementierung von React DVA finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

<<:  Verwenden Sie Docker, um Tomcat bereitzustellen und eine Verbindung zu Skywalking herzustellen

>>:  Meta Viewport ermöglicht die Vollbildanzeige von Webseiten auf dem iPhone

Artikel empfehlen

Detaillierte Erläuterung der asynchronen Axios-Kommunikation in Vue

1. Zuerst erstellen wir eine JSON-Datei zur inter...

Schauen wir uns einige leistungsstarke Operatoren in JavaScript an

Inhaltsverzeichnis Vorwort 1. Null-Koaleszenzoper...

HTML als Startseite festlegen und zu Favoriten hinzufügen_Powernode Java Academy

So implementieren Sie die Funktionen „Als Startse...

Vue+Rem benutzerdefinierter Karusselleffekt

Die Implementierung eines benutzerdefinierten Kar...

React kapselt die globale Bullet-Box-Methode

In diesem Artikelbeispiel wird der spezifische Co...

Mehrere Gründe, HTML nicht zu komprimieren

Der Grund ist einfach: In HTML-Dokumenten entsprec...

Grafische Erklärung des MySQL-Abfragecaches

Inhaltsverzeichnis 1. Prinzipübersicht Query Cach...

Upgrade der Docker-Version von MySQL 5.7 auf MySQL 8.0.13, Datenmigration

Inhaltsverzeichnis 1. Sichern Sie die alten MySQL...

Diagramm des Tomcat CentOS-Installationsprozesses

Tomcat CentOS-Installation Dieses Installationstu...

Detaillierte Erklärung dreier häufig verwendeter Webeffekte in JavaScript

Inhaltsverzeichnis 1 Element Offset-Serie 1.1 Off...