⊗jsrxPmSDSO 36 of 57 menu

Атрыманне селектараў у Redux

Часам вельмі карысна пазбавіцца ад лішняга кода ў прыкладанні, а таксама інкапсуляваць даныя.

Давайце адкрыем наша прыкладанне з прадуктамі. Звярніце ўвагу, што ў некалькіх месцах прыкладання мы, выкарыстоўваючы селектары, выцягваем слайс з прадуктамі, каб зрабіць з ім якія-небудзь дзеянні.

А зараз мы адкрыем наш productsSlice.js, спусцімся ў самы канец файла і дадамі пару радкоў кода, у якім напішам два селектары і экспартуем іх. Адна функцыя ў нас будзе для атрымання ўсіх прадуктаў:

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

А пасля яго другая - для атрымання аднаго прадукту па id:

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

Вядома ў вас можа ўзнікнуць слушнае пытанне - адкуль у нас такі вось наварат: state.products.products? Адказ просты, мы ж на мінулым занятці змянілі структуру слайса і цяпер нашы прадукты будуць знаходзіцца ў выглядзе масіва ў асобнай уласцівасці products слайса прадуктаў state.products (памятайце, што тут state - гэта караневы аб'ект стан Redux, які змяшчае ўсе слайсы).

Такім чынам мы проста перанеслі код для функцый-селектараў у адно месца ў прыкладанні і цяпер нам трэба ўнесці адпаведныя змены там, дзе мы іх выкарыстоўвалі. Пачнем з файла ProductsList.jsx. Імпартуем у яго selectAllProducts, паколькі тут нам трэба будзе атрымаць усе прадукты:

import { selectAllProducts } from './productsSlice'

І ў пачатку кода функцыі ProductsList, замянім:

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

На радок:

const products = useSelector(selectAllProducts)

А цяпер перайдзем да файла ProductPage.jsx. Тут нам патрэбны быў прадукт па id. Зробім замену радка (не забудзьце пра імпарт):

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

На:

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

Зрабіце падобную замену самі ў файле EditProductForm.jsx. Тут нам таксама патрэбны прадукт па id.

Памятайце, што такая аптымізацыя толькі для вашага зручнасці і вы можаце зрабіць яе тады, калі палічыце патрэбнай і зручнай. А на нашым прыкладзе ўявіце, што мы б пісалі код функцыі-селектара кожны раз у розных месцах, а потым бы змянілі структуру стэйта, і прыйшлося б яго тады выпраўляць ва ўсіх кампанентах.

Адкрыйце ваша прыкладанне са студэнтамі. Адкрыйце ў ім файл studentsSlice.js. У самым нізе файла напішыце і экспартуйце, як паказана ў уроку, два селектары для атрымання ўсіх студэнтаў selectAllStudents і для атрымання аднаго студэнта па id selectStudentById.

Цяпер імпартуйце selectAllStudents і selectStudentById у файлы StudentsList.jsx, StudentPage.jsx і EditStudentForm.jsx, унясіце ў гэтых файлах адпаведныя змены, як паказана ў уроку.

Беларуская
AfrikaansAzərbaycanБългарскиবাংলাČeštinaDanskDeutschΕλληνικά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
Мы выкарыстоўваем cookie для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць