⊗jsrxPmSDSO 36 of 57 menu

Uzyskiwanie selektorów w Redux

Czasami bardzo przydatne jest pozbycie się zbędnego kodu w aplikacji, a także enkapsulacja danych.

Otwórzmy naszą aplikację z produktami. Zwróć uwagę, że w kilku miejscach aplikacji my, używając selektorów, pobieramy slice z produktami, aby wykonać z nim jakieś działania.

A teraz otworzymy nasz productsSlice.js, zejdziemy na sam koniec pliku i dodamy kilka linijek kodu, w którym napiszemy dwa selektory i je wyeksportujemy. Jedna funkcja u nas będzie do uzyskiwania wszystkich produktów:

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

A po nim druga - do uzyskiwania jednego produktu po id:

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

Oczywiście może pojawić się słuszne pytanie - skąd u nas taki wynalazek: state.products.products? Odpowiedź jest prosta, przecież na poprzedniej lekcji zmieniliśmy strukturę slice'a i teraz nasze produkty będą znajdować się w postaci tablicy w osobnej właściwości products slice'a produktów state.products (pamiętajcie, że tutaj state - to jest główny obiekt stanu Redux, który zawiera wszystkie slice'y).

W ten sposób po prostu przenieśliśmy kod dla funkcji-selektorów w jedno miejsce w aplikacji i teraz musimy wprowadzić odpowiednie zmiany tam, gdzie je używaliśmy. Zacznijmy od pliku ProductsList.jsx. Zaimportujmy do niego selectAllProducts, ponieważ tutaj nam trzeba będzie uzyskać wszystkie produkty:

import { selectAllProducts } from './productsSlice'

I na początku kodu funkcji ProductsList, zamieńmy:

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

Na linijkę:

const products = useSelector(selectAllProducts)

A teraz przejdźmy do pliku ProductPage.jsx. Tutaj nam potrzebny był produkt po id. Zróbmy zamianę linii (nie zapomnijcie o imporcie):

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

Na:

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

Zróbcie podobną zamianę samodzielnie w pliku EditProductForm.jsx. Tutaj nam również potrzebny jest produkt po id.

Pamiętajcie, że taka optymalizacja jest tylko dla waszej wygody i możecie ją zrobić wtedy, kiedy uznacie za potrzebną i wygodną. A na naszym przykładzie wyobraźcie sobie, że my by pisali kod funkcji-selektora za każdym razem w różnych miejscach, a potem by zmienili strukturę stanu, i trzeba by go wtedy poprawiać we wszystkich komponentach.

Otwórz twoją aplikację ze studentami. Otwórz w niej plik studentsSlice.js. Na samym dole pliku napisz i wyeksportuj, jak pokazano w lekcji, dwa selektory do uzyskiwania wszystkich studentów selectAllStudents i do uzyskiwania jednego studenta po id selectStudentById.

Teraz zaimportuj selectAllStudents i selectStudentById do plików StudentsList.jsx, StudentPage.jsx i EditStudentForm.jsx, wprowadź w tych plikach odpowiednie zmiany, jak pokazano w lekcji.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć