⊗jsrxPmSDSO 36 of 57 menu

Selektorių gavimas Redux

Kartais labai naudinga atsikratyti nereikalingo kodo programoje, taip pat inkapsuliuoti duomenis.

Atidarykime mūsų produktų programą. Atkreipkite dėmesį, kad keliose vietose programoje mes, naudodami selektorius, ištraukiame produktų dalį (slice), kad su ja atliktume kokius nors veiksmus.

O dabar atidarykime mūsų productsSlice.js, nusileiskime pačią failo pabaigą ir pridėkime porą eilučių kodo, kuriame parašysime du selektorius ir juos eksportuosime. Viena funkcija mums bus skirti visiems produktams gauti:

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

Ir po jos antra - vienam produktui pagal id gauti:

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

Žinoma, jums gali kilti teisėtas klausimas - iš kur mums toks sudėtingumas: state.products.products? Atsakymas paprastas, mes juk praeitoje pamokoje pakeitėme dalinės būsenos (slice) struktūrą ir dabar mūsų produktai bus randami kaip masyvas atskirame savybėje products produktų dalies state.products (atminkite, kad čia state - tai pagrindinis Redux būsenos objektas, kuriame yra visos dalinės būsenos (slices)).

Taigi mes tiesiog perkėlėme kodą funkcijoms-selektoriams į vieną vietą programoje ir dabar mums reikia atlikti atitinkamus pakeitimus ten, kur juos naudojome. Pradėkime nuo failo ProductsList.jsx. Importuokime į jį selectAllProducts, nes čia mums reikės gauti visus produktus:

import { selectAllProducts } from './productsSlice'

Ir funkcijos ProductsList pradžioje, pakeiskime:

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

Šia eilute:

const products = useSelector(selectAllProducts)

O dabar pereikime prie failo ProductPage.jsx. Čia mums reikėjo produkto pagal id. Atlikime eilutės pakeitimą (nepamirškite apie importą):

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

Į:

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

Atlikite panašų pakeitimą patys faile EditProductForm.jsx. Čia mums taip pat reikia produkto pagal id.

Atminkite, kad toks optimizavimas tik jūsų patogumui ir jūs galite jį atlikti tada, kai laikysite tai reikalingu ir patogiu. O mūsų pavyzdyje įsivaizduokite, kad mes rašytume funkcijos-selektoriaus kodą kiekvieną kartą skirtingose vietose, o vėliau pakeistume būsenos struktūrą, ir tada tektų jį taisyti visuose komponentuose.

Atidarykite savo studentų programą. Atidarykite joje failą studentsSlice.js. Pačiame failo apačioje parašykite ir eksportuokite, kaip parodyta pamokoje, du selektorius: visiems studentams gauti selectAllStudents ir vienam studentui pagal id gauti selectStudentById.

Dabar importuokite selectAllStudents ir selectStudentById į failus StudentsList.jsx, StudentPage.jsx ir EditStudentForm.jsx, atlikite šiuose failuose atitinkamus pakeitimus, kaip parodyta pamokoje.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti