⊗jsrxPmATTRC 55 of 57 menu

Anzeige der Thunk-Ergebnisse in einer Komponente in Redux

In der letzten Lektion haben wir eine POST-Anfrage mit dem Thunk addProduct gesendet. Lassen Sie uns nun die Ergebnisse seiner Arbeit in der Komponente anzeigen.

Öffnen wir unsere Produktanwendung und darin die Datei NewProductForm.jsx, da diese Komponente für das Hinzufügen eines neuen Produkts verantwortlich ist. Schauen wir uns die Importzeilen an. Ersetzen wir den Import der Action productAdded durch den Import des Thunks addProduct:

import { addProduct } from './productsSlice'

Da wir im Slice den Status 'pending' der Anfrage nicht verfolgen, lassen Sie uns es so einrichten, dass der Benutzer die Schaltfläche zum Speichern des Produkts nur einmal drücken kann, da wir keine identischen wiederholten Anfragen benötigen. Dazu richten wir einen weiteren lokalen State ein:

const [requestStatus, setRequestStatus] = useState('idle')

Als nächstes schreiben wir nach den Event-Handlern und vor der Funktion onSaveProductClick Code, in dem wir prüfen, ob alle Formularfelder ausgefüllt sind und ob der Anfragestatus 'idle' ist:

const canBeSaved = [name, desc, price, amount, sellerId].every(Boolean) && requestStatus === 'idle'

Anschließend ändern wir den Code für onSaveProductClick. Erstens wird dies eine asynchrone Funktion sein und sie wird nur ausgeführt, wenn die obige Bedingung erfüllt ist:

const onSaveProductClick = async () => { if (canBeSaved) {} }

Obwohl wir im Slice den Status 'rejected' nicht verfolgen, können wir den Fehler trotzdem in der Konsole ausgeben. Dazu verwenden wir die Konstruktion try-catch. Hier werden wir auch finally hinzufügen, um nach Abschluss der Anfrage den lokalen State wieder auf 'idle' zu setzen:

const onSaveProductClick = async () => { if (canBeSaved) { try { } catch (err) { console.error('Fehler beim Speichern des Produkts: ', err) } finally { setRequestStatus('idle') } } }

Wir haben die catch- und finally-Blöcke behandelt, lassen Sie uns den Code für den try-Block schreiben. Hier setzen wir den lokalen Status auf 'in progress', bis wir eine Antwort als Ergebnis der Thunk-Arbeit zurückerhalten, und senden dann unseren Thunk addProduct. Die Verwendung der Konstruktion try-catch in Abhängigkeit vom Antworttyp wird uns durch die RTK-Funktion unwrap ermöglicht, die sie zum zurückgegebenen Promise hinzufügt. Wenn die Anfrage erfolgreich war, setzen wir die lokalen States auf ihre Ausgangszustände zurück. Der vollständige Code für onSaveProductClick sieht dann so aus:

const onSaveProductClick = async () => { if (canBeSaved) { try { setRequestStatus('in progress') await dispatch( addProduct({ name, desc, price, amount, seller: sellerId })).unwrap() setName('') setDesc('') setPrice(0) setAmount(0) setSellerId('') } catch (err) { console.error('Fehler beim Speichern des Produkts: ', err) } finally { setRequestStatus('idle') } } }

Starten wir unsere Anwendung und versuchen, ein neues Produkt hinzuzufügen. Wie Sie sehen, werden bei erfolgreicher Anfrage die Felder geleert und das neue Produkt zur Produktliste hinzugefügt. Schauen Sie sich auch im Browser in den Redux DevTools um und navigieren Sie durch die Tabs, betrachten Sie die Actions und wie sich Ihr State verändert.

Öffnen Sie Ihre Studentenanwendung. Öffnen Sie darin die Datei NewStudentForm.jsx. Fügen Sie einen weiteren lokalen State requestStatus hinzu, und setzen Sie ihn anfänglich auf 'idle'. Nachdem Sie sich mit den Materialien der Lektion vertraut gemacht haben, erstellen Sie die Variable canBeSaved, mit der die Schaltfläche zum Speichern der neuen Studentendaten aktiviert/deaktiviert wird, abhängig vom Wert requestStatus und der Ausgefülltheit der Felder.

Schreiben Sie asynchronen Code für onSaveStudentClick, der den Wert von requestStatus situationsabhängig ändert, den Thunk addProduct mit den Daten des neuen Studenten sendet, die Felder im Falle einer erfolgreichen Anfrage leert und einen Fehler in die Konsole ausgibt, falls er fehlschlägt, wie in der Lektion gezeigt. Verwenden Sie dazu die Konstruktion try-catch und die RTK-Funktion unwrap.

Starten Sie Ihre Anwendung, fügen Sie einen neuen Studenten hinzu und vergewissern Sie sich, dass alles funktioniert.

bydeenesfrptru