⊗jsrxPmSDSO 36 of 57 menu

Získávání selektorů v Reduxu

Někdy je velmi užitečné zbavit se nadbytečného kódu v aplikaci a také zapouzdřit data.

Pojďme otevřít naši aplikaci s produkty. Všimněte si, že na několika místech aplikace jsme pomocí selektorů vytahovali slice s produkty, abychom s ním provedli nějaké akce.

A teď otevřeme náš productsSlice.js, sjedeme na úplný konec souboru a přidáme pár řádků kódu, ve kterém napíšeme dva selektory a exportujeme je. Jedna funkce bude pro získání všech produktů:

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

A po něm druhá - pro získání jednoho produktu podle id:

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

Jistě vás může napadnout spravedlivá otázka - odkud máme takovouhle vazbu: state.products.products? Odpověď je jednoduchá, my jsme na minulé lekci změnili strukturu slice a teď budou naše produkty umístěny jako pole v samostatné vlastnosti products slice produktů state.products (pamatujte, že zde state je kořenový objekt stavu Redux, který obsahuje všechny slice).

Takto jsme jednoduše přenesli kód pro funkce-selektory na jedno místo v aplikaci a teď potřebujeme provést odpovídající změny tam, kde jsme je použili. Začněme souborem ProductsList.jsx. Importujme do něj selectAllProducts, protože zde potřebujeme získat všechny produkty:

import { selectAllProducts } from './productsSlice'

A na začátku kodu funkce ProductsList nahradíme:

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

Tímto řádkem:

const products = useSelector(selectAllProducts)

A teď přejděme k souboru ProductPage.jsx. Zde jsme potřebovali produkt podle id. Provedeme nahrazení řádku (nezapomeňte na import):

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

Na:

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

Podobnou výměnu proveďte sami v souboru EditProductForm.jsx. Zde také potřebujeme produkt podle id.

Pamatujte, že taková optimalizace je pouze pro vaše pohodlí a můžete ji provést kdykoli ji budete považovat za potřebnou a vhodnou. A v našem příkladu si představte, že bychom psali kód funkce-selektoru pokaždé na různých místech, a pak bychom změnili strukturu stavu, a museli bychom ho pak opravovat ve všech komponentách.

Otevřete vaši aplikaci se studenty. Otevřete v ní soubor studentsSlice.js. Na úplném konci souboru napište a exportujte, jak je ukázáno v lekci, dva selektory pro získání všech studentů selectAllStudents a pro získání jednoho studenta podle id selectStudentById.

Nyní importujte selectAllStudents a selectStudentById do souborů StudentsList.jsx, StudentPage.jsx a EditStudentForm.jsx, proveďte v těchto souborech odpovídající změny, jak je ukázáno v lekci.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout