⊗jsrxPmRDPAD 26 of 57 menu

Priprema podataka za action objekat u Redux-u

Nedavno smo govorili o tome da funkcija createSlice očekuje jedan argument prilikom kreiranja action.payload. S jedne strane, ovo pojednostavljuje njeno korišćenje, sa druge strane može zahtevati dodatne korake za pripremu sadržaja action objekta.

Otvorimo našu aplikaciju sa proizvodima, i u njoj fajl NewProductForm.jsx. Obratite pažnju na sledeću liniju koda:

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

Ovde sastavljamo payload objekat direktno u React komponenti i prosleđujemo ga u akciju productAdded. Šta ako budemo morali da šaljemo istu akciju iz nekoliko komponenti ili ako logika za sastavljanje bude komplikovana? U principu, našoj komponenti bi trebalo da bude svejedno kako izgleda objekat u payload za ovu akciju. Takođe, ne odgovara nam stalno dupliranje koda.

Ove probleme nam opet može pomoći da reši naš poznati createSlice, pošto prilikom pisanja reducera on dozvoljava da koristimo callback-funkciju prepare, u kojoj možemo pisati različitu logiku, generisati nasumične brojeve i slično. U takvom slučaju vrednost za polje reducera može biti predstavljena u obliku sledećeg objekta:

{reducer, prepare}

Otvorimo naš fajl productsSlice.js i izmenimo kod za reducer productAdded. Sada ovaj deo koda:

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

Promešaćemo u sledeći, u kojem će se funkcija reducer baviti ažuriranjem stanja (state) u store-u, a prepare će vraćati objekat payload sa generisanim id i ostalim našim podacima:

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

Pošto ćemo sada generisati id ovde, a ne u komponenti, dodajmo nanoid u import:

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

Na kraju, unesimo izmene u NewProductForm.jsx. Umesto linije:

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

Imaćemo ovakvu, u kojoj ćemo jednostavno preko zareza proslediti potrebne podatke (ne zaboravite u ovom fajlu da uklonite nanoid iz import-a):

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

Pokrenimo aplikaciju, zatim kreirajmo novi proizvod i uverimo se da nismo ništa pokvarili.

Otvorite vašu aplikaciju sa studentima. U fajlu StudentsSlice.js prepišite vaš reducer studentAdded tako, da bude u obliku objekta {reducer, prepare}, kao što je prikazano u lekciji.

Unesite odgovarajuće izmene u fajl NewStudentForm.jsx, kao što je prikazano u lekciji. Pokrenite aplikaciju i uverite se da sve radi kao i ranije.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij