⊗jsrxPmSDSO 36 of 57 menu

Λήψη Selectors στο Redux

Μερικές φορές είναι πολύ χρήσιμο να απαλλαγούμε από τον περιττό κώδικα στην εφαρμογή, καθώς και να ενσωματώσουμε τα δεδομένα.

Ας ανοίξουμε την εφαρμογή προϊόντων μας. Παρατηρήστε ότι σε διάφορα σημεία της εφαρμογής, χρησιμοποιώντας selectors, ανακτούμε το slice των προϊόντων για να εκτελέσουμε κάποιες ενέργειες με αυτό.

Τώρα θα ανοίξουμε το productsSlice.js, θα κατεβούμε στο τέλος του αρχείου και θα προσθέσουμε μερικές γραμμές κώδικα, όπου θα γράψουμε δύο selectors και θα τα εξάγουμε. Μία συνάρτηση θα είναι για τη λήψη όλων των προϊόντων:

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

Και μετά από αυτήν, η δεύτερη - για τη λήψη ενός προϊόντος βάσει id:

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

Φυσικά μπορεί να έχετε μια δικαιολογημένη ερώτηση - από πού προέρχεται αυτή η περίπλοκη δομή: state.products.products; Η απάντηση είναι απλή, επειδή στο προηγούμενο μάθημα αλλάξαμε τη δομή του slice και τώρα τα προϊόντα μας θα βρίσκονται ως πίνακας σε μια ξεχωριστή ιδιότητα products του slice προϊόντων state.products (θυμηθείτε ότι εδώ state είναι το κεντρικό αντικείμενο κατάστασης του Redux, που περιέχει όλα τα slices).

Έτσι, απλώς μεταφέραμε τον κώδικα για τις συναρτήσεις-selectors σε ένα μέρος στην εφαρμογή και τώρα πρέπει να κάνουμε τις αντίστοιχες αλλαγές εκεί, όπου τις χρησιμοποιούσαμε. Ας ξεκινήσουμε με το αρχείο 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.

Θυμηθείτε, ότι μια τέτοια βελτιστοποίηση είναι μόνο για την ευκολία σας και μπορείτε να την κάνετε όταν τη θεωρήσετε απαραίτητη και βολική. Στο παράδειγμά μας, φανταστείτε ότι θα γράφαμε τον κώδικα της συνάρτησης-selector κάθε φορά σε διάφορα σημεία, και μετά θα αλλάζαμε τη δομή της κατάστασης, και τότε θα έπρεπε να τον διορθώσουμε σε όλα τα components.

Ανοίξτε την εφαρμογή σας με τους φοιτητές. Ανοίξτε σε αυτήν το αρχείο studentsSlice.js. Στο τέλος του αρχείου γράψτε και εξάγετε, όπως φαίνεται στο μάθημα, δύο selectors για τη λήψη όλων των φοιτητών selectAllStudents και για τη λήψη ενός φοιτητή βάσει id selectStudentById.

Τώρα εισάγετε τα selectAllStudents και selectStudentById στα αρχεία StudentsList.jsx, StudentPage.jsx και EditStudentForm.jsx, κάντε σε αυτά τα αρχεία τις αντίστοιχες αλλαγές, όπως φαίνεται στο μάθημα.

Ελληνικά
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschEnglishEspañ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 για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη