⊗jsrxPmSDSO 36 of 57 menu

Szelektorok lekérése Redux-ban

Időnként nagyon hasznos megszabadulni a felesleges kódtól az alkalmazásban, valamint inkapszulálni az adatokat.

Nyissuk meg a termékek alkalmazásunkat. Figyeljük meg, hogy az alkalmazás több helyén mi, szelektorokat használva, kihúzzuk a termékek slice-ját, hogy valamilyen műveletet hajtsunk végre velük.

Most pedig nyissuk meg a productsSlice.js fájlt, menjünk a fájl legvégére és adjunk hozzá pár sort kódot, amiben írunk két szelektort és exportáljuk őket. Az egyik függvény az összes termék lekérésére szolgál:

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

Utána pedig a második - egy termék lekérésére id alapján:

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

Természetesen felmerülhet bennetek egy jogos kérdés - honnan van egy ilyen bonyolultság: state.products.products? A válasz egyszerű, hiszen a múlt leckén megváltoztattuk a slice szerkezetét és mostantól a termékeink tömb formájában egy külön products nevű tulajdonságban lesznek elhelyezve a termékek state.products slice-jában (emlékezzetek, hogy itt a state a Redux állapot gyökérobjektuma, ami tartalmazza az összes slice-ot).

Így egyszerűen áthelyeztük a szelektor függvények kódját egy helyre az alkalmazáson belül és most meg kell tennünk a szükséges módosításokat ott, ahol használtuk őket. Kezdjük a ProductsList.jsx fájllal. Importáljuk bele a selectAllProducts-t, mivel itt az összes termékre van szükségünk:

import { selectAllProducts } from './productsSlice'

És a ProductsList függvény kódjának elején cseréljük le:

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

Ezt a sort:

const products = useSelector(selectAllProducts)

Most pedig menjünk a ProductPage.jsx fájlhoz. Itt egy termékre volt szükségünk id alapján. Cseréljük le a sort (ne felejtsük el az importot):

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

Erre:

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

Végezzétek el hasonló cserét magatok a EditProductForm.jsx fájlban. Itt szintén egy termékre van szükségünk id alapján.

Ne feledjétek, hogy egy ilyen optimalizálás csak a ti kényelmetek szolgálja és akkor tehetitek meg, amikor szükségesnek és kényelmesnek tartjátok. Példánkon gondoljátok át, hogy ha írni kellene a szelektor függvény kódját minden alkalommal különböző helyeken, majd később megváltoztatnánk az állapot szerkezetét, akkor azt kellene javítani minden komponensben.

Nyissátok meg a diákok alkalmazásotokat. Nyissátok meg benne a studentsSlice.js fájlt. A fájl legalján írjátok és exportáljátok, ahogy a leckében is láttátok, két szelektort az összes diák lekérésére selectAllStudents és egy diák lekérésére id alapján selectStudentById.

Most importáljátok a selectAllStudents és a selectStudentById szelektorokat a StudentsList.jsx, StudentPage.jsx és EditStudentForm.jsx fájlokba, végezzétek el ezekben a fájlokban a szükséges módosításokat, ahogy a leckében is láttátok.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás