⊗jsrxPmRDPAD 26 of 57 menu

Forberedelse af data for action-objektet i Redux

For nylig talte vi om, at funktionen createSlice forventer ét argument ved oprettelse af action.payload. På den ene side forenkler dette dens anvendelse, på den anden side kan det kræve yderligere handlinger for at forberede indholdet af action-objektet.

Lad os åbne vores applikation med produkter, og i den filen NewProductForm.jsx. Læg mærke til følgende kodelinje:

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

Her samler vi payload-objektet lige i React-komponenten og sender det til actionen productAdded. Men hvad hvis vi bliver nødt til at sende den samme action fra flere komponenter, eller logikken til samlingen viser sig at være kompleks? I princippet bør vores komponent være ligeglad med, hvordan objektet i payload for denne action ser ud. Derudoor er vi ikke tilfredse med konstant duplikering af kode.

Disse problemer kan vores berømte createSlice igen hjælpe os med at løse, da den ved skrivning af en reducer tillader os at bruge en callback-funktion prepare, hvor vi kan skrive forskellig logik, generere tilfældige tal og mere. I sådant tilfælde kan værdien for reducer-feltet repræsenteres som følgende objekt:

{reducer, prepare}

Lad os åbne vores fil productsSlice.js og ændre koden for reduceren productAdded. Nu er denne kodesnutter:

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

Vi ændrer til følgende, hvor funktionen reducer vil håndtere opdatering af state i storet, og prepare - returnerer payload-objektet med det genererede id og vores andre data:

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

Da vi nu vil generere id her, og ikke i komponenten, lad os tilføje nanoid til importen:

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

Til sidst laver vi ændringerne i NewProductForm.jsx. I stedet for linjen:

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

Vil vi have sådan en, hvor vi simpelthen gennem kommaer sender de nødvendige data (husk at fjerne nanoid fra importen i denne fil):

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

Lad os starte applikationen, derefter oprette et nyt produkt og sikre os, at vi ikke har ødelagt noget.

Åbn din applikation med studerende. I filen StudentsSlice.js omskriv din reducer studentAdded på en sådan måde, at den er i form af et objekt {reducer, prepare}, som vist i lektionen.

Foretag de tilsvarende ændringer i filen NewStudentForm.jsx, som vist i lektionen. Start applikationen og vær sikker på, at alt fungerer som før.

Dansk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDeutschΕλληνικά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
Vi bruger cookies til webstedets funktion, analyse og personalisering. Behandling af data foregår i henhold til Fortrolighedspolitikken.
accepter alle tilpas afvis