Inhaltsverzeichnis
Das letzte Mal haben wir über die Verwendung von Redux für die Zustandsverwaltung gesprochen. Dieses Mal verwenden wir Redux-Saga, um asynchrone Vorgänge von Redux-Anwendungen zu verwalten
- Schauen wir uns zunächst die vom angemeldeten Reducer initiierten Aktionen an
Erstellen Sie die Saga-Middleware und stellen Sie eine Verbindung zum Redux-Store her
Listen-Aktion
Heim Web-Frontend js-Tutorial Ausführliche Erläuterung von Beispielen von React-Praxisprojekten (3)

Ausführliche Erläuterung von Beispielen von React-Praxisprojekten (3)

Jul 24, 2017 pm 03:58 PM
react 实践 项目

React hat fast 70.000 Sterne auf Github und ist derzeit das beliebteste Frontend-Framework. Ich lerne React schon seit einiger Zeit und fange jetzt an, React+Redux zum tatsächlichen Üben zu verwenden!

Das letzte Mal haben wir über die Verwendung von Redux für die Zustandsverwaltung gesprochen. Dieses Mal verwenden wir Redux-Saga, um asynchrone Vorgänge von Redux-Anwendungen zu verwalten

React-Übungsprojekt (1)

React Practical Project (2)

React Practical Project (3)

- Schauen wir uns zunächst die vom angemeldeten Reducer initiierten Aktionen an

export const auth = (state = initialState, action = {}) => {
  switch (action.type) {
    case LOGIN_USER:
      return state.merge({
        'user': action.data,
        'error': null,
        'token': null,
      });
    case LOGIN_USER_SUCCESS:
      return state.merge({
        'token': action.data,
        'error': null
      });
    case LOGIN_USER_FAILURE:
      return state.merge({
        'token': null,
        'error': action.data
      });
    default:
      return state
  }
};
Nach dem Login kopieren

Sagas. Entscheiden Sie dann, was auf der Grundlage dieser Aktion zu tun ist: Initiieren Sie einen asynchronen Aufruf (z. B. eine Ajax-Anfrage), initiieren Sie andere Aktionen für den Store oder rufen Sie sogar andere Sagas auf.

Die spezifische Anmeldefunktion besteht darin, dass, wenn wir auf das Anmelde-Popup-Fenster klicken, eine LOGIN_USER-Aktion ausgegeben wird, die LOGIN_USER-Aktion überwacht, eine Ajax-Anfrage im Hintergrund initiiert und entscheidet um LOGIN_USER_SUCCESS basierend auf dem Ergebnis zu initiieren oder LOGIN_USER_FAILUREAktion

Als nächstes implementieren wir diesen Prozess

  • Erstellen Sie die Saga-Middleware und stellen Sie eine Verbindung zum Redux-Store her

redux-sagaAbhängigkeiten in package.json hinzufügen

"redux-saga": "^0.15.4"

Ändern src/redux/store/store.js

/**
 * Created by Yuicon on 2017/6/27.
 */
import {createStore, applyMiddleware } from 'redux';
import createSagaMiddleware from 'redux-saga'
import reducer from '../reducer/reducer';

import rootSaga from '../sagas/sagas';

const sagaMiddleware = createSagaMiddleware();

const store = createStore(
  reducer,
  applyMiddleware(sagaMiddleware)
);

sagaMiddleware.run(rootSaga);

export default store;
Nach dem Login kopieren

Redux-Saga verwendet die Generatorfunktion, um

  • Listen-Aktion

Src/redux/sagas/sagas.js erstellen

/**
 * Created by Yuicon on 2017/6/28.
 */
import { takeLatest } from 'redux-saga/effects';
import {registerUserAsync, loginUserAsync} from './users';
import {REGISTER_USER, LOGIN_USER} from '../action/users';

export default function* rootSaga() {
  yield [
    takeLatest(REGISTER_USER, registerUserAsync),
    takeLatest(LOGIN_USER, loginUserAsync)
  ];
}
Nach dem Login kopieren
<🎜 zu implementieren >Wir können sehen, dass es in rootSaga überwacht wird. Die beiden Aktionen sind Anmeldung und Registrierung.

Im obigen Beispiel erlaubt takeLatest nur die Ausführung einer loginUserAsync-Aufgabe. Und diese Aufgabe ist die letzte, die gestartet wird. Wenn bereits eine Aufgabe ausgeführt wird, wird die vorherige Aufgabe automatisch abgebrochen.

Wenn wir zulassen, dass mehrere loginUserAsync-Instanzen gleichzeitig gestartet werden. Zu einem bestimmten Zeitpunkt können wir eine neue loginUserAsync-Aufgabe starten, auch wenn eine oder mehrere vorherige loginUserAsync-Aufgaben noch nicht abgeschlossen sind. Wir können die Hilfsfunktion takeEvery verwenden.

  • Eine Ajax-Anfrage initiieren

  • Daten zum Store-Status abrufen

selectors.js

/**
 * Created by Yuicon on 2017/6/28.
 */
export const getAuth = state => state.auth;
Nach dem Login kopieren
  • api

api.js

/**
 * Created by Yuicon on 2017/7/4.
 * 
 */

/**
 * 这是我自己的后台服务器,用 Java 实现
 * 项目地址:
 * 文档:http://139.224.135.86:8080/swagger-ui.html#/
 */
const getURL = (url) => `http://139.224.135.86:8080/${url}`;

export const login = (user) => {
  return fetch(getURL("auth/login"), {
    method: &#39;POST&#39;,
    headers: {
      &#39;Content-Type&#39;: &#39;application/json&#39;
    },
    body: JSON.stringify(user)
  }).then(response => response.json())
    .then(json => {
      return json;
    })
    .catch(ex => console.log(&#39;parsing failed&#39;, ex));
};
Nach dem Login kopieren
  • src/redux/ erstellen sagas/users.js

/**
 * Created by Yuicon on 2017/6/30.
 */
import {select, put, call} from &#39;redux-saga/effects&#39;;
import {getAuth, getUsers} from &#39;./selectors&#39;;
import {loginSuccessAction, loginFailureAction, registerSuccessAction, registerFailureAction} from &#39;../action/users&#39;;
import {login, register} from &#39;./api&#39;;
import &#39;whatwg-fetch&#39;;

export function* loginUserAsync() {
  // 获取Store state 上的数据
  const auth = yield select(getAuth);
  const user = auth.get(&#39;user&#39;);
  // 发起 ajax 请求
  const json = yield call(login.bind(this, user), &#39;login&#39;);
  if (json.success) {
    localStorage.setItem(&#39;token&#39;, json.data);
    // 发起 loginSuccessAction
    yield put(loginSuccessAction(json.data));
  } else {
    // 发起 loginFailureAction
    yield put(loginFailureAction(json.error));
  }
}
Nach dem Login kopieren

Wird verwendet, um Daten zum Store-Status zu erhalten select(selector, ...args)
Eine Aktion zum Store initiierenput(action)
Rufen Sie fn The auf Die Funktion verwendet Argumente als Parameter. Wenn das Ergebnis ein Promise ist, hält die Middleware an, bis das Promise aufgelöst ist, und der Generator setzt die Ausführung nach der Auflösung fort. Oder bis das Versprechen abgelehnt wird. In diesem Fall wird ein Fehler im Generator ausgegeben. call(fn, ...args)

Redux-saga detaillierte API-Dokumentation

  • Fazit

Ich verwende Redux-Thunk bei der Arbeit, Redux-Thunk ist relativ einfacher zu implementieren und zu warten. Bei komplexen Vorgängen, insbesondere bei komplexen asynchronen Vorgängen, bietet Redux-Saga jedoch weitere Vorteile. An dieser Stelle haben wir ein Einführungs-Tutorial für Redux-Saga abgeschlossen. Es gibt viele wunderbare Dinge über Redux-Saga,



Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung von Beispielen von React-Praxisprojekten (3). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Kann KI Fermats letzten Satz überwinden? Der Mathematiker gab fünf Jahre seiner Karriere auf, um 100 Beweisseiten in Code umzuwandeln Kann KI Fermats letzten Satz überwinden? Der Mathematiker gab fünf Jahre seiner Karriere auf, um 100 Beweisseiten in Code umzuwandeln Apr 09, 2024 pm 03:20 PM

Fermats letzter Satz steht kurz davor, von der KI erobert zu werden? Und das Bedeutsamste an der ganzen Sache ist, dass der letzte Satz von Fermat, den die KI gerade lösen wird, genau dazu dient, zu beweisen, dass KI nutzlos ist. Früher gehörte die Mathematik zum Bereich der reinen menschlichen Intelligenz; heute wird dieses Gebiet von fortschrittlichen Algorithmen entschlüsselt und mit Füßen getreten. Bild Der letzte Satz von Fermat ist ein „berüchtigtes“ Rätsel, das Mathematikern seit Jahrhunderten Rätsel aufgibt. Es wurde 1993 bewiesen, und jetzt haben Mathematiker einen großen Plan: den Beweis mithilfe von Computern nachzubilden. Sie hoffen, dass etwaige logische Fehler in dieser Version des Beweises durch einen Computer überprüft werden können. Projektadresse: https://github.com/riccardobrasca/flt

Ein genauerer Blick auf PyCharm: eine schnelle Möglichkeit, Projekte zu löschen Ein genauerer Blick auf PyCharm: eine schnelle Möglichkeit, Projekte zu löschen Feb 26, 2024 pm 04:21 PM

Titel: Erfahren Sie mehr über PyCharm: Eine effiziente Möglichkeit, Projekte zu löschen. In den letzten Jahren wurde Python als leistungsstarke und flexible Programmiersprache von immer mehr Entwicklern bevorzugt. Bei der Entwicklung von Python-Projekten ist es entscheidend, eine effiziente integrierte Entwicklungsumgebung zu wählen. Als leistungsstarke integrierte Entwicklungsumgebung stellt PyCharm Python-Entwicklern viele praktische Funktionen und Tools zur Verfügung, darunter das schnelle und effiziente Löschen von Projektverzeichnissen. Im Folgenden konzentrieren wir uns auf die Verwendung von delete in PyCharm

Praktische Tipps für PyCharm: Konvertieren Sie ein Projekt in eine ausführbare EXE-Datei Praktische Tipps für PyCharm: Konvertieren Sie ein Projekt in eine ausführbare EXE-Datei Feb 23, 2024 am 09:33 AM

PyCharm ist eine leistungsstarke integrierte Python-Entwicklungsumgebung, die eine Fülle von Entwicklungstools und Umgebungskonfigurationen bietet und es Entwicklern ermöglicht, Code effizienter zu schreiben und zu debuggen. Bei der Verwendung von PyCharm für die Python-Projektentwicklung müssen wir manchmal das Projekt in eine ausführbare EXE-Datei packen, um es auf einem Computer auszuführen, auf dem keine Python-Umgebung installiert ist. In diesem Artikel wird erläutert, wie Sie mit PyCharm ein Projekt in eine ausführbare EXE-Datei konvertieren, und es werden spezifische Codebeispiele aufgeführt. Kopf

So verhindern Sie, dass Outlook automatisch Ereignisse zu meinem Kalender hinzufügt So verhindern Sie, dass Outlook automatisch Ereignisse zu meinem Kalender hinzufügt Feb 26, 2024 am 09:49 AM

Als E-Mail-Manager-Anwendung ermöglicht uns Microsoft Outlook die Planung von Ereignissen und Terminen. Es ermöglicht uns, organisiert zu bleiben, indem es Tools zum Erstellen, Verwalten und Verfolgen dieser Aktivitäten (auch Ereignisse genannt) in der Outlook-Anwendung bereitstellt. Allerdings werden manchmal unerwünschte Ereignisse zum Kalender in Outlook hinzugefügt, was zu Verwirrung bei den Benutzern führt und den Kalender mit Spam überschwemmt. In diesem Artikel werden wir verschiedene Szenarien und Schritte untersuchen, die uns dabei helfen können, zu verhindern, dass Outlook automatisch Ereignisse zu meinem Kalender hinzufügt. Outlook-Ereignisse – ein kurzer Überblick Outlook-Ereignisse dienen mehreren Zwecken und verfügen über viele nützliche Funktionen wie folgt: Kalenderintegration: In Outlook

PHP, Vue und React: Wie wählt man das am besten geeignete Frontend-Framework aus? PHP, Vue und React: Wie wählt man das am besten geeignete Frontend-Framework aus? Mar 15, 2024 pm 05:48 PM

PHP, Vue und React: Wie wählt man das am besten geeignete Frontend-Framework aus? Angesichts der kontinuierlichen Weiterentwicklung der Internettechnologie spielen Front-End-Frameworks eine wichtige Rolle bei der Webentwicklung. PHP, Vue und React sind drei repräsentative Frontend-Frameworks, jedes mit seinen eigenen einzigartigen Eigenschaften und Vorteilen. Bei der Auswahl des zu verwendenden Frontend-Frameworks müssen Entwickler eine fundierte Entscheidung treffen, die auf den Projektanforderungen, Teamfähigkeiten und persönlichen Vorlieben basiert. In diesem Artikel werden die Eigenschaften und Verwendungsmöglichkeiten der drei Front-End-Frameworks PHP, Vue und React verglichen.

Mar 18, 2024 am 10:18 AM

Dream Weaver CMS Station Group Practice Sharing In den letzten Jahren hat die Erstellung von Websites mit der rasanten Entwicklung des Internets immer mehr an Bedeutung gewonnen. Bei der Erstellung mehrerer Websites hat sich die Site-Group-Technologie zu einer sehr effektiven Methode entwickelt. Unter den vielen Tools zum Erstellen von Websites ist DreamWeaver CMS aufgrund seiner Flexibilität und Benutzerfreundlichkeit für viele Website-Enthusiasten zur ersten Wahl geworden. In diesem Artikel werden einige praktische Erfahrungen mit der Dreamweaver CMS-Stationsgruppe sowie einige spezifische Codebeispiele vorgestellt, in der Hoffnung, Lesern, die sich mit der Stationsgruppentechnologie befassen, etwas Hilfe zu bieten. 1. Was ist die Dreamweaver CMS-Stationsgruppe? Dream Weaver CMS

PHP-Codierungspraktiken: Alternativen zu Goto-Anweisungen ablehnen PHP-Codierungspraktiken: Alternativen zu Goto-Anweisungen ablehnen Mar 28, 2024 pm 09:24 PM

PHP-Codierungspraktiken: Weigerung, Alternativen zu Goto-Anweisungen zu verwenden In den letzten Jahren haben Programmierer mit der kontinuierlichen Aktualisierung und Iteration von Programmiersprachen begonnen, den Codierungsspezifikationen und Best Practices mehr Aufmerksamkeit zu schenken. In der PHP-Programmierung gibt es die goto-Anweisung als Kontrollflussanweisung schon seit langem, in praktischen Anwendungen führt sie jedoch häufig zu einer Verschlechterung der Lesbarkeit und Wartbarkeit des Codes. In diesem Artikel werden einige Alternativen vorgestellt, die Entwicklern helfen sollen, die Verwendung von goto-Anweisungen zu verweigern und die Codequalität zu verbessern. 1. Warum die Verwendung der goto-Anweisung verweigern? Lassen Sie uns zunächst darüber nachdenken, warum

Integration von Java-Framework und Front-End-React-Framework Integration von Java-Framework und Front-End-React-Framework Jun 01, 2024 pm 03:16 PM

Integration von Java-Framework und React-Framework: Schritte: Richten Sie das Back-End-Java-Framework ein. Projektstruktur erstellen. Konfigurieren Sie Build-Tools. Erstellen Sie React-Anwendungen. Schreiben Sie REST-API-Endpunkte. Konfigurieren Sie den Kommunikationsmechanismus. Praxisfall (SpringBoot+React): Java-Code: RESTfulAPI-Controller definieren. Reaktionscode: Rufen Sie die von der API zurückgegebenen Daten ab und zeigen Sie sie an.

See all articles