⊗jsrxPmSDSO 36 of 57 menu

Dobijanje selektora u Redux-u

Ponekad je veoma korisno osloboditi se suvišnog koda u aplikaciji, kao i inkapsulirati podatke.

Hajde da otvorimo našu aplikaciju sa proizvodima. Obratite pažnju da na nekoliko mesta aplikacije mi, koristeći selektore, izvlačimo slice sa proizvodima kako bismo izvršili neke radnje sa njim.

A sada ćemo otvoriti naš productsSlice.js, spustiti se na sam kraj fajla i dodati par linija koda, u kojima ćemo napisati dva selektora i eksportovati ih. Jedna funkcija će biti za dobijanje svih proizvoda:

export const selectAllProducts = (state) => state.products.products

A posle njega druga - za dobijanje jednog proizvoda po id-u:

export const selectProductById = (state, productId) => state.products.products.find((product) => product.id === productId)

Naravno, može vam se pojaviti pravedno pitanje - odakle nam ovakav složeni izraz: state.products.products? Odgovor je jednostavan, mi smo na prethodnoj lekciji promenili strukturu slice-a i sada će naši proizvodi biti smešteni u vidu niza u odvojenom svojstvu products slice-a proizvoda state.products (zapamtite, da ovde state predstavlja korenski objekat stanja Redux-a, koji sadrži sve slice-ove).

Tako smo jednostavno preneli kod za funkcije-selektore na jedno mesto u aplikaciji i sada nam je potrebno da unesemo odgovarajuće promene tamo, gde smo ih koristili. Počnimo sa fajlom ProductsList.jsx. Uvezićemo u njega selectAllProducts, pošto nam ovde treba da dobijemo sve proizvode:

import { selectAllProducts } from './productsSlice'

I na početku koda funkcije ProductsList, zamenićemo:

const products = useSelector((state) => state.products)

Sa linijom:

const products = useSelector(selectAllProducts)

A sada prelazimo na fajl ProductPage.jsx. Ovde nam je trebao proizvod po id-u. Uradićemo zamenu linije (ne zaboravite na import):

const product = useSelector((state) => state.products.find((product) => product.id === productId) )

Sa:

const product = useSelector((state) => selectProductById(state, productId))

Uradite sličnu zamenu sami u fajlu EditProductForm.jsx. Ovde nam takođe treba proizvod po id-u.

Zapamtite, da je ovakva optimizacija samo za vašu udobnost i da je možete uraditi kada smatrate da je potrebna i zgodna. A na našem primeru zamislite da bismo svaki put pisali kod funkcije-selektora na različitim mestima, a onda promenili strukturu state-a, i morali bismo je onda ispravljati u svim komponentama.

Otvorite vašu aplikaciju sa studentima. Otvorite u njoj fajl studentsSlice.js. Na samom dnu fajla napišite i eksportujte, kao što je pokazano na lekciji, dva selektora za dobijanje svih studenata selectAllStudents i za dobijanje jednog studenta po id-u selectStudentById.

Sada importujte selectAllStudents i selectStudentById u fajlove StudentsList.jsx, StudentPage.jsx i EditStudentForm.jsx, unesite u tim fajlovima odgovarajuće promene, kao što je pokazano na lekciji.

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