Reduceri u Redux-u

Na prethodnoj lekciji smo pomoću funkcije createSlice kreirali slice za proizvode products i reducer koji će ažurirati ovaj slice, koji se čuva u store-u. Još jednom podsećam, da se u Redux-u podaci stanja menjaju pomoću reducera.

Treba imati na umu da se na reducere nameće niž ograničenja. Reducer ažurira stanje samo na osnovu dobijenih vrednosti trenutnog stanja i objekta action, a zatim odlučuje, kako da promeni stanje i vraća njegovu novu vrednost.

Znamo da su podrazumevano objekti i nizovi u JavaScript-u mutabilni (promenljivi). Takođe znamo da se stanje ne sme direktno menjati, u takvim slučajevima treba raditi samo sa kopijama. Ovom pravilu se mora pokoravati i reducer. Ali ručno pisanje takve logike može biti prilično zamorno i složeno, i ovde u pomoć dolazi funkcija createSlice, koja koristi biblioteku Immer, koja transformiše vaš 'mutabilni' kod u 'nemutabilni'. Na taj način, grešiti i pojednostavljivati život možete samo pri korišćenju funkcija createSlice ili createReducer.

U ograničenja reducera spada takođe korišćenje asinhrone logike, izračunavanje slučajnih vrednosti i izvršavanje drugih "sporednih efekata". A sada, nakon što smo se upoznali sa reducerom izbliza, vratimo se našoj aplikaciji sa proizvodima.

U našoj aplikaciji postoji store, koji smo kreirali u prethodnim lekcijama, ali za sada u njemu nema ničega. Hajde da otvorimo naš fajl store.js i dodamo u njega malo koda. Za početak importujmo u njega funkciju reducera za proizvode:

app/store.jsimport productsReducer from '../parts/products/productsSlice'

Sada kao reducer možemo navedemo importovanu funkciju productsReducer:

app/store.jsexport default configureStore({
  reducer: {
    products: productsReducer
  }
})

Gorenavedenom linijom govorimo našem store-u da sada pri nastanku action-a svi podaci za slice state.products će biti ažurirani reducerom productsReducer.

Sada možete pokrenuti aplikaciju (primetite, da je iz konzole nestalo upozorenje o nevalidnom reduceru!), otvoriti Redux DevTools u browser-u i proći kroz njegove kartice. Na primer, klikom na karticu State u kartici Inspector možemo videti naša dva objekta sa proizvodima, koji su se prikazali kao početna vrednost stanja pri prvom pokretanju aplikacije. Na kartici Log monitor vidimo koje slice-ove ima globalno stanje - to je slice products, koji uključuje dva objekta. Takođe pogledajte karticu Chart.

Задание 1

Otvorite vašu aplikaciju sa studentima i izmenite kod fajla store.js, kako je prikazano u lekciji.

Задание 2

Pokrenite u browser-u vašu aplikaciju i prođite kroz kartice ekstenzije Redux DevTools.