⊗jsrxPmRDPAD 26 of 57 menu

Datu sagatavošana action objektam Redux

Nesen mēs ar jums runājām par to, ka funkcija createSlice sagaida vienu argumentu, veidojot action.payload. No vienas puses tas vienkāršo tās lietošanu, no otras puses var būt nepieciešami papildu soļi, lai sagatavotu action objekta saturu.

Atvērsim mūsu lietotni ar produktiem, un tajā failu NewProductForm.jsx. Pievērsiet uzmanību šai koda rindai:

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

Šeit mēs salikām payload objektu tieši React komponentē un nododam to action productAdded. Ko darīt, ja mums nāksies nosūtīt šādu action no vairākām komponentēm vai loģika salikšanai izrādīsies sarežģīta? Idejā mūsu komponentei vajadzētu būt vienalga, kā izskatās objekts payload šim action. Turklāt mums neapmierina pastāvīgā koda dublēšana.

Šīs problēmas atkal var mums palīdzēt atrisināt mūsu slavenais createSlice, jo, rakstot reduceri, tas ļauj mums izmantot callback funkciju prepare, kurā var rakstīt dažādu loģiku, ģenerēt nejaušus skaitļus un citu. Šādā gadījumā vērtību reducera laukam var attēlot kā šādu objektu:

{reducer, prepare}

Atvērsim mūsu failu productsSlice.js un izmainīsim kodu reducerim productAdded. Tagad šis koda gabals:

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

Mēs mainīsim uz šo, kurā funkcija reducer nodarbosies ar stāvokļa atjaunināšanu store, bet prepare - atgriezīs objektu payload ar ģenerētu id un citiem mūsu datiem:

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

Tā kā tagad mēs ģenerēsim id šeit, nevis komponentē, pievienosim nanoid importam:

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

Visbeidzot veiksim izmaiņas NewProductForm.jsx. Tā vietā rindā:

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

Mums būs šāda, kurā mēs vienkārši caur komatu nodosim nepieciešamos datus (neaizmirstiet šajā failā noņemt nanoid no importa):

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

Palaidīsim lietotni, tad izveidosim jaunu produktu un pārliecināsimies, ka mēs neko nesabojājām.

Atveriet savu lietotni ar studentiem. Failā StudentsSlice.js pārrakstiet savu reduceri studentAdded tā, lai tas būtu objekta formā {reducer, prepare}, kā parādīts nodarbībā.

Veiciet atbilstošās izmaiņas failā NewStudentForm.jsx, kā parādīts nodarbībā. Palaidiet lietotni un pārliecinieties, ka viss darbojas tāpat kā iepriekš.

Latviešu
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mēs izmantojam sīkdatnes, lai nodrošinātu vietnes darbību, analīti un personalizāciju. Datu apstrāde notiek saskaņā ar Konfidencialitātes politiku.
pieņemt visus iestatīt noraidīt