⊗jsrxPmRDPAD 26 of 57 menu

Förberedelse av data för ett action-objekt i Redux

Nyligen pratade vi om att funktionen createSlice förväntar sig ett argument när den skapar action.payload. Å ena sidan förenklar detta dess användning, å andra sidan kan det kräva extra åtgärder för att förbereda innehållet i action-objektet.

Låt oss öppna vår produktapplikation, och i den filen NewProductForm.jsx. Lägg märke till följande kodrad:

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

Här sammanställer vi payload-objektet direkt i React-komponenten och skickar det till action productAdded. Men vad händer om vi behöver skicka samma action från flera komponenter eller om logiken för sammanställningen blir komplex? I princip borde vår komponent vara oberoende av hur objektet i payload för denna action ser ut. Dessutom är vi inte nöjda med konstant kodduplicering.

Dessa problem kan vår berömda createSlice återigen hjälpa oss att lösa, eftersom den när vi skriver en reducer tillåter oss att använda en callback-funktion prepare, där vi kan skriva olika logik, generera slumpmässiga nummer och så vidare. I så fall kan värdet för reducer-fältet representeras som följande objekt:

{reducer, prepare}

Låt oss öppna vår fil productsSlice.js och ändra koden för reducern productAdded. Nu kommer denna kodbit:

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

Vi ändrar till följande, där funktionen reducer kommer att hantera uppdateringen av state i store, och prepare - returnera payload-objektet med ett genererat id och vår andra data:

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

Eftersom vi nu kommer att generera id här, och inte i komponenten, låt oss lägga till nanoid i importen:

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

Slutligen gör vi ändringar i NewProductForm.jsx. Istället för raden:

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

Kommer vi att ha denna, där vi helt enkelt skickar den data vi behöver, separerat med kommatecken (kom ihåg att ta bort nanoid från importen i denna fil):

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

Låt oss starta applikationen, sedan skapa en ny produkt och se till att vi inte har förstört något.

Öppna din studentapplikation. I filen StudentsSlice.js skriver du om din reducer studentAdded så att den är i form av ett objekt {reducer, prepare}, som visas i lektionen.

Gör motsvarande ändringar i filen NewStudentForm.jsx, som visas i lektionen. Starta applikationen och se till att allt fungerar som förut.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa