⊗jsrxPmRDPAD 26 of 57 menu

Voorbereiding van gegevens voor het action object in Redux

Onlangs hebben we besproken dat de functie createSlice één argument verwacht bij het aanmaken van action.payload. Aan de ene kant vereenvoudigt dit het gebruik, aan de andere kant kan het extra handelingen vereisen om de inhoud van het action object voor te bereiden.

Laten we onze applicatie met producten openen, en daarin het bestand NewProductForm.jsx. Let op de volgende regel code:

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

Hier assembleren we het payload object rechtstreeks in de React component en geven het door aan de action productAdded. Maar wat als we dezelfde action vanuit meerdere componenten moeten versturen of de logica voor het assembleren complex wordt? In principe zou het onze component niet moeten uitmaken hoe het object in payload voor deze action eruitziet. Bovendien zijn we niet tevreden met de constante herhaling van code.

Deze problemen kan onze beroemde createSlice ons weer helpen oplossen, omdat het bij het schrijven van een reducer ons toestaat een callback-functie prepare te gebruiken, waarin we verschillende logica kunnen schrijven, willekeurige getallen kunnen genereren, enzovoort. In dat geval kan de waarde voor het reducer-veld worden weergegeven als het volgende object:

{reducer, prepare}

Laten we ons bestand productsSlice.js openen en de code voor de reducer productAdded aanpassen. Nu is dit stukje code:

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

We veranderen dit in het volgende, waarin de functie reducer zich bezighoudt met het updaten van de state in de store, en prepare - het retourneren van het payload object met de gegenereerde id en onze andere gegevens:

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

Omdat we nu de id hier gaan genereren, en niet in de component, laten we nanoid toevoegen aan de import:

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

Ten slotte passen we de NewProductForm.jsx aan. In plaats van de regel:

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

Zullen we deze hebben, waarin we eenvoudig de benodigde gegevens doorgeven, gescheiden door komma's (vergeet niet nanoid uit de import in dit bestand te verwijderen):

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

Laten we de applicatie starten, vervolgens een nieuw product aanmaken en controleren of we niets hebben kapotgemaakt.

Open je applicatie met studenten. Herschrijf in het bestand StudentsSlice.js je reducer studentAdded zodanig dat deze in de vorm van een object {reducer, prepare} staat, zoals getoond in de les.

Breng de corresponderende wijzigingen aan in het bestand NewStudentForm.jsx, zoals getoond in de les. Start de applicatie en controleer dat alles werkt zoals voorheen.

Nederlands
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wij gebruiken cookies voor de werking van de site, analyse en personalisatie. De verwerking van gegevens gebeurt volgens het Privacybeleid.
alles accepteren aanpassen weigeren