⊗jsrxPmATInr 45 of 57 menu

Uvod v thunks v Redux

V prejšnjem poglavju smo organizirali delo strežnika, podatkovne baze in odjemalca za izmenjavo podatkov. Zdaj moramo zgraditi še zadnjo povezavo, ki bo pomagala naši 'sinhroni' organizirani Redux aplikaciji interagirati z asinhronim odjemalcem, ki smo ga ustvarili v zadnji lekciji prejšnjega poglavja, za pošiljanje zahtevkov in pridobivanje potrebnih podatkov v odgovoru.

Kot se spomnimo iz prvih lekcij prejšnjega razdelka, Redux ne ve ničesar o delu z asinhrono logiko in zato bomo uporabili thunk middleware. Ta middleware omogoča delo z odposlanimi actions (akcijami), uporabo metod store dispatch in getState v kodu našega thunk, ter pomaga metodi dispatch delovati ne le z navadnimi JS objekti, temveč tudi s entitetami, kot so funkcije in promise-i (obljube).

Običajno se thunk-funkcija kliče z dvema argumentoma dispatch in getState (po potrebi), ki ju lahko uporabljamo v telesu te funkcije. Z njo lahko pošiljamo običajne action-e. Prav tako jo lahko pošljemo preko store.dispatch. Primer takšne funkcije je prikazan spodaj:

const changeColorThunk = (dispatch, getState) => { const colorBefore = getState() console.log(`Stara barva: ${colorBefore.color}`) dispatch(changeColor()) const colorAfter = getState() console.log(`Nova barva: ${colorAfter.color}`) } store.dispatch(changeColorThunk)

Odprimo zdaj našo aplikacijo s produkti. Prva stvar, ki jo moramo dobiti od strežnika ob zagonu aplikacije, je seznam produktov. Ker se thunks običajno pišejo v slice-datotekah, bomo odprli datoteko productsSlice.js.

Dobra novica je, da nam ni treba vmešavati z namestitvijo Redux Thunk, ker bo funkcija configureStore iz RTK to že naredila za nas. Zato preprosto dodajmo createAsyncThunk v uvoz v datoteki:

import { createSlice, nanoid, createAsyncThunk } from '@reduxjs/toolkit'

Dodajmo tudi naš odjemalec (client) v uvoz:

import { client } from '../../api/client'

In zdaj s pomočjo createAsyncThunk ustvarimo naš prvi thunk za pridobivanje produktov. Naredimo to takoj za deklaracijo objekta initialState:

export const fetchProducts = createAsyncThunk()

Prvi parameter createAsyncThunk bo sprejel niz za tip generiranega action-a, drugi parameter pa callback-funkcijo za payload, ki bo kot rezultat vrnila ali podatke ali promise z napako (poglejte datoteko client.js). V kodu funkcije pokličemo client.get in ji posredujemo pot, ki smo jo določili na strežniku (poglejte sprejete parametre http.get v server.js):

export const fetchProducts = createAsyncThunk( 'products/fetchProducts', async () => { const response = await client.get('/fakeServer/products') return response.data } )

Odprite vašo aplikacijo s študenti. Odprite v njej datoteko studentsSlice.js. Uvozite vanjo funkcijo createAsyncThunk za ustvarjanje thunk, in client za pošiljanje API zahtev na strežnik.

Takoj za deklaracijo objekta initialState s pomočjo createAsyncThunk ustvarite thunk fetchStudents za pridobivanje seznama študentov, ki bo pošiljal GET-zahtevek na naslov /fakeServer/students, določen v vaši datoteki server.js, in vrnil response.data, kot je prikazano v gradivu lekcije. Kot prvi parameter za createAsyncThunk določite niz students/fetchStudents za tip action-a.

Slovenščina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Za delovanje spletnega mesta, analitiko in personalizacijo uporabljamo piškotke. Obdelava podatkov poteka v skladu s Politiko zasebnosti.
sprejmi vse nastavi zavrni