⊗jsrxPmRDPAD 26 of 57 menu

Vorbereitung der Daten für ein Action-Objekt in Redux

Wir haben kürzlich darüber gesprochen, dass die Funktion createSlice ein Argument bei der Erstellung von action.payload erwartet. Einerseits vereinfacht dies ihre Verwendung, andererseits kann es zusätzliche Schritte zur Vorbereitung des Inhalts des Action-Objekts erfordern.

Öffnen wir unsere Produktanwendung und darin die Datei NewProductForm.jsx. Achten Sie auf die folgende Codezeile:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Hier bauen wir das payload-Objekt direkt in der React-Komponente zusammen und übergeben es an die Action productAdded. Was aber, wenn wir dieselbe Action aus mehreren Komponenten senden müssen oder die Logik zum Zusammenbau komplex wird? Im Prinzip sollte es unserer Komponente egal sein, wie das Objekt in payload für diese Action aussieht. Außerdem sind wir mit der ständigen Code-Duplikation nicht zufrieden.

Diese Probleme kann uns wiederum unser berühmter createSlice helfen zu lösen, da er uns beim Schreiben eines Reducers erlaubt, eine Callback-Funktion prepare zu verwenden, in der wir verschiedene Logik schreiben, Zufallszahlen generieren und mehr können. In einem solchen Fall kann der Wert für das Reducer-Feld als folgendes Objekt dargestellt werden:

{reducer, prepare}

Öffnen wir unsere Datei productsSlice.js und ändern den Code für den Reducer productAdded. Jetzt wird dieses Code-Stück:

productAdded(state, action) { state.push(action.payload) },

Wir ändern es in das Folgende, wobei die Funktion reducer sich um die Aktualisierung des States im Store kümmert, und prepare - das payload-Objekt mit der generierten id und unseren anderen Daten zurückgibt:

productAdded: { reducer(state, action) { state.push(action.payload) }, prepare(name, desc, price, amount) { return { payload: { id: nanoid(), name, desc, price, amount, }, } }, },

Da wir nun die id hier generieren werden, und nicht in der Komponente, fügen wir nanoid zum Import hinzu:

import { createSlice, nanoid } from '@reduxjs/toolkit'

Zum Schluss nehmen wir Änderungen in NewProductForm.jsx vor. Anstelle der Zeile:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Haben wir diese, in der wir einfach durch Kommas getrennt die benötigten Daten übergeben (vergessen Sie nicht, in dieser Datei nanoid aus dem Import zu entfernen):

dispatch(productAdded(name, desc, price, amount))

Starten wir die Anwendung, erstellen dann ein neues Produkt und stellen Sie sicher, dass wir nichts kaputt gemacht haben.

Öffnen Sie Ihre Studenten-Anwendung. Schreiben Sie in der Datei StudentsSlice.js Ihren Reducer studentAdded so um, dass er in Form eines Objekts {reducer, prepare} vorliegt, wie in der Lektion gezeigt.

Nehmen Sie die entsprechenden Änderungen in der Datei NewStudentForm.jsx vor, wie in der Lektion gezeigt. Starten Sie die Anwendung und stellen Sie sicher, dass alles wie zuvor funktioniert.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen