⊗jsrxPmATCDT 47 of 57 menu

Senden eines Thunks aus einer Komponente in Redux

In dieser Lektion senden wir einen Thunk zum Abrufen der Produkte aus der React-Komponente ProductsList.

Lassen Sie uns nun unsere Produktanwendung öffnen, und darin die Datei ProductsList.jsx. Zuerst fügen wir den Thunk fetchProducts, den wir erstellt haben, zum Import hinzu:

import { selectAllProducts, fetchProducts } from './productsSlice'

Wir benötigen auch den Hook useDispatch um unseren Action Creator zu senden, und den Hook useEffect, weil wir hier einen Nebeneffekt haben, da wir es mit dem Netzwerk zu tun haben, was schon eine externe API ist:

import { useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux'

Jetzt fügen wir in der ersten Zeile des Codes der Funktion ProductsList, vor der Deklaration von products, hinzu:

const dispatch = useDispatch()

Als nächstes werden wir beim Abrufen der Produkte aus dem State auch den Status der Anfrage extrahieren:

const products = useSelector(selectAllProducts) const productStatus = useSelector((state) => state.products.status)

Und direkt danach teilen wir React mit Hilfe des Hooks useEffect mit, dass wir nach dem Rendern der Komponente die Produkte abrufen müssen. Hier brauchen wir den Anfragestatus, denn es ist wichtig, dass eine solche Anfrage nur einmal gesendet wird:

useEffect(() => { if (productStatus === 'idle') { dispatch(fetchProducts()) } }, [productStatus, dispatch])

Jetzt können wir unsere Anwendung starten, darin auf 'Products' im Menü links klicken. Die Produktliste werden wir noch nicht sehen, aber wenn wir in unsere Redux DevTools gehen, erscheinen auf der linken Seite des Fensters die automatisch generierten (wie ich in der letzten Lektion sagte) Actions products/fetchProducts/pending und fulfilled. Lassen Sie uns nun auf den Action products/fetchProducts/fulfilled und sein Feld payload klicken - hier ist unsere Produktliste! Hurra, alle unsere Glieder in der Kette - Server, Datenbank, Client und die Redux-Anwendung - arbeiten reibungslos und gemeinsam. Übrigens, wie Sie hier sehen, gibt es auch eine meta-Eigenschaft, in der wir den Status der Anfrage sehen.

Achten wir auf noch eine Sache, bei Ihnen kann es vorkommen, dass pending und, folglich, fulfilled zweimal angezeigt werden. Wenn das so ist, seien Sie nicht beunruhigt, wir werden später darüber sprechen.

Öffnen Sie Ihre Studentenanwendung. Öffnen Sie darin die Datei StudentsList.jsx. Importieren Sie die notwendigen Hooks und den Thunk gemäß dem Material aus der Lektion.

Indem Sie die Materialien der Lektion studieren, rufen Sie den Anfragestatus studentStatus ab, und senden Sie dann, unter Verwendung von useEffect, den fetchStudents nur unter der Bedingung, dass der Wert von studentStatus - 'idle' ist.

Starten Sie Ihre Anwendung, klicken Sie im Menü der Anwendung links auf 'Students', und starten Sie dann die Browsererweiterung Redux DevTools, wie in dieser Lektion sollten Sie die Actions mit pending und fulfilled sehen (und darin payload mit den Studenten). Erkunden Sie die Tabs der Erweiterung.

bydeenesfrptru