⊗jsrxPmATCDT 47 of 57 menu

Αποστολή thunk από το component στο Redux

Σε αυτό το μάθημα θα στείλουμε ένα thunk για την ανάκτηση προϊόντων από το React-component ProductsList.

Ας ανοίξουμε τώρα την εφαρμογή μας με τα προϊόντα, και σε αυτή το αρχείο ProductsList.jsx. Για αρχή ας προσθέσουμε στην εισαγωγή το thunk fetchProducts, που δημιουργήσαμε:

import { selectAllProducts, fetchProducts } from './productsSlice'

Επίσης, θα χρειαστούμε το hook useDispatch για να στείλουμε τον action creator μας και το hook useEffect επειδή εδώ έχουμε παρενέργεια (side effect), αφού έχουμε να κάνουμε με δίκτυο, και αυτό είναι ήδη ένα εξωτερικό API:

import { useEffect } from 'react' import { useSelector, useDispatch } from 'react-redux'

Τώρα η πρώτη γραμμή στον κώδικα της συνάρτησης ProductsList πριν από τη δήλωση products ας προσθέσουμε:

const dispatch = useDispatch()

Στη συνέχεια, κατά την ανάκτηση των προϊόντων από την state θα εξάγουμε επίσης την κατάσταση του αιτήματος:

const products = useSelector(selectAllProducts) const productStatus = useSelector((state) => state.products.status)

Και αμέσως μετά θα πούμε στο React με τη βοήθεια του hook useEffect, ότι μετά την απόδοση του component πρέπει να ανακτήσουμε τα προϊόντα. Εδώ θα χρειαστούμε την κατάσταση του αιτήματος, αφού είναι σημαντικό ένα τέτοιο αίτημα να αποστέλλεται μόνο μία φορά:

useEffect(() => { if (productStatus === 'idle') { dispatch(fetchProducts()) } }, [productStatus, dispatch])

Τώρα μπορούμε να εκκινήσουμε την εφαρμογή μας, να κλικάρουμε στο 'Products' στο αριστερό μενού. Δεν θα δούμε ακόμα τη λίστα προϊόντων, αλλά αν πάμε στα Redux DevTools, στο αριστερό μέρος του παραθύρου θα εμφανιστούν οι αυτόματα παραγόμενοι (όπως είπα στο προηγούμενο μάθημα) actions products/fetchProducts/pending και fulfilled. Τώρα ας κλικάρουμε στο action products/fetchProducts/fulfilled και στο πεδίο του payload - να η λίστα μας με τα προϊόντα! Ζήτω, όλοι οι κρίκοι της αλυσίδας μας - ο server, η βάση δεδομένων, ο client και η εφαρμογή Redux - λειτουργούν αρμονικά και συλλογικά. Παρεμπιπτόντως, όπως βλέπετε εδώ υπάρχει και η ιδιότητα meta, στην οποία βλέπουμε την κατάσταση του αιτήματος.

Ας δώσουμε προσοχή σε ένα ακόμα πράγμα, μπορεί να σας συμβεί το pending και, κατά συνέπεια, το fulfilled να εμφανίζονται δύο φορές. Αν συμβαίνει αυτό, μην απελπίζεστε, θα μιλήσουμε γι' αυτό αργότερα.

Ανοίξτε την εφαρμογή σας με τους μαθητές. Ανοίξτε σε αυτή το αρχείο StudentsList.jsx. Εισαγάγετε σε αυτό τα απαραίτητα hooks και το thunk σύμφωνα με το υλικό από το μάθημα.

Μελετώντας το υλικό του μαθήματος, ανακτήστε την κατάσταση του αιτήματος studentStatus, και στη συνέχεια, χρησιμοποιώντας το useEffect, στείλτε το fetchStudents μόνο υπό την προϋπόθεση ότι η τιμή του studentStatus είναι 'idle'.

Εκκινήστε την εφαρμογή σας, κλικάρετε στο μενού της εφαρμογής αριστερά στο 'Students', και στη συνέχεια εκκινήστε στο πρόγραμμα πλοήγησης την επέκταση Redux DevTools, όπως και σε αυτό το μάθημα πρέπει να δείτε actions με pending και fulfilled (και σε αυτό το payload με τους μαθητές). Εξερευνήστε τις καρτέλες της επέκτασης.

Ελληνικά
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 για τη λειτουργία του ιστότοπου, την ανάλυση και την εξατομίκευση. Η επεξεργασία των δεδομένων γίνεται σύμφωνα με την Πολιτική Απορρήτου.
αποδοχή όλων ρύθμιση απόρριψη