⊗jsrxPmSDSO 36 of 57 menu

Pridobivanje selektorjev v Reduxu

Včasih je zelo koristno, da se znebimo odvečne kode v aplikaciji, pa tudi da inkapsuliramo podatke.

Odprimo našo aplikacijo s produkti. Opozorimo, da na več mestih aplikacije z uporabo selektorjev pridobivamo slice s produkti, da z njim izvedemo nekatere akcije.

Trenutno bomo odprli naš productsSlice.js, se spustili na sam konec datoteke in dodali nekaj vrstic kode, v kateri bomo napisali dva selektorja in jih izvozili. Ena funkcija bo za pridobitev vseh produktov:

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

In za njo druga - za pridobitev enega produkta po id:

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

Seveda se lahko pojavi upravičeno vprašanje - od kod imamo takšno zapletenost: state.products.products? Odgovor je preprost, saj smo v prejšnji lekciji spremenili strukturo slicea in zdaj bodo naši produkti shranjeni kot matrika v ločenem propertyu products slicea produktov state.products (zapomnite si, da je tukaj state - korenski objekt stanja Redux, ki vsebuje vse slice).

Tako smo preprosto premaknili kodo za funkcije-selektorje na eno mesto v aplikaciji in zdaj moramo opraviti ustrezne spremembe tam, kjer smo jih uporabljali. Začnimo z datoteko ProductsList.jsx. Uvozimo vanjo selectAllProducts, saj tukaj potrebujemo pridobiti vse produkte:

import { selectAllProducts } from './productsSlice'

In na začetku kode funkcije ProductsList, zamenjajmo:

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

Z vrstico:

const products = useSelector(selectAllProducts)

In zdaj pojdimo k datoteki ProductPage.jsx. Tukaj smo potrebovali produkt po id. Naredimo zamenjavo vrstice (ne pozabite na uvoz):

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

Z:

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

Podobno zamenjavo naredite sami v datoteki EditProductForm.jsx. Tukaj prav tako potrebujemo produkt po id.

Zapomnite si, da je takšna optimizacija samo za vašo udobje in jo lahko naredite takrat, ko menite, da je potrebna in priročna. In na našem primeru si predstavljajte, da bi pisali kodo funkcije-selektorja vsakič v različnih mestih, potem pa bi spremenili strukturo statea, in ga bi potem morali popraviti v vseh komponentah.

Odprite vašo aplikacijo s študenti. Odprite v njej datoteko studentsSlice.js. Čisto na dnu datoteke napišite in izvozite, kot je prikazano v lekciji, dva selektorja za pridobitev vseh študentov selectAllStudents in za pridobitev enega študenta po id selectStudentById.

Zdaj uvozite selectAllStudents in selectStudentById v datoteke StudentsList.jsx, StudentPage.jsx in EditStudentForm.jsx, opravite v teh datotekah ustrezne spremembe, kot je prikazano v lekciji.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni