⊗jsrxPmATInr 45 of 57 menu

Bevezetés a thunk-ok használatába a Redux-ban

Az előző fejezetben megszerveztük a szerver, az adatbázis és a kliens működését az adatcseréhez. Most meg kell húznunk az utolsó hídunkat, amely segíti a 'szinkron' módon szervezett Redux alkalmazásunkat az aszinkron klienssel való interakcióban, amit az előző fejezet utolsó leckén hoztunk létre, hogy lekéréseket küldjünk és szükséges adatokat kapjunk válaszban.

Ahogy emlékszünk az előző rész első leckéiből, a Redux nem tud semmit az aszinkron logika kezeléséről, és erre a thunk middleware-t fogjuk használni. Ez a middleware lehetővé teszi a küldött actions kezelését, lehetővé teszi a thunk kódjában a dispatch és getState store metódusok használatát, valamint segíti a dispatch metódust abban, hogy ne csak szimpla JS objektumokkal dolgozzon, hanem olyan entitásokkal is, mint a függvények és a promise-ok.

Általában a thunk-függvényt két argumentummal hívjuk meg: dispatch és getState (szükség esetén), amelyeket fel lehet használni a függvény törzsében. Segítségével küldhetünk szokásos action-öket. Továbbá küldhetjük a store.dispatch metódussal is. Egy példa egy ilyen függvényre alább látható:

const changeColorThunk = (dispatch, getState) => { const colorBefore = getState() console.log(`Old Color: ${colorBefore.color}`) dispatch(changeColor()) const colorAfter = getState() console.log(`New Color: ${colorAfter.color}`) } store.dispatch(changeColorThunk)

Most nyissuk meg a termékek alkalmazásunkat. Az első dolog, amit a szervertől kapnunk kell az alkalmazás indításakor - ez a termékek listája. Mivel általában a thunk-ok a slice fájlokban íródnak, ezért megnyitjuk a productsSlice.js fájlt.

Az örömteli hír az, hogy nincs dolgunk a Redux Thunk telepítésével, mivel a configureStore függvény az RTK-ból ezt már megteszi helyettünk. Ezért egyszerűen adjuk hozzá a createAsyncThunk importot a fájlban:

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

Adjunk hozzá importként a klienst is:

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

És most a createAsyncThunk segítségével hozzuk létre az első thunk-unkat a termékek lekéréséhez, tegyük ezt közvetlenül a initialState objektum deklarálása után:

export const fetchProducts = createAsyncThunk()

A createAsyncThunk első paramétere egy sztring a generált action típusához, a második pedig egy callback függvény a payload számára, amely az eredményben visszaad vagy adatokat, vagy egy hibás promise-ot (lásd a client.js fájlt). A függvény kódjában mi meghívjuk a client.get metódust és átadjuk neki az utat, amit a szerveren adtunk meg (nézd meg a http.get által elfogadott paramétereket a server.js fájlban):

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

Nyisd meg a diákok alkalmazásodat. Nyisd meg benne a studentsSlice.js fájlt. Importáld bele a createAsyncThunk függvényt a thunk létrehozásához, valamint a client-t a API kérések szerverre történő küldéséhez.

Közvetlenül a initialState objektum deklarálása után a createAsyncThunk segítségével hozz létre egy thunk-ot fetchStudents névvel a diákok listájának lekéréséhez, amely egy GET kérést fog küldeni a /fakeServer/students címre, ami meg van adva a server.js fájlodban, és vissza fogja adni a response.data-t, ahogyan az a lecke anyagaiban látható. A createAsyncThunk első paramétereként adj meg egy students/fetchStudents sztringet az action típushoz.

Magyar
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
A weboldal működéséhez, elemzéshez és személyre szabáshoz sütiket használunk. Az adatfeldolgozás a Adatvédelmi irányelvek szerint történik.
összes elfogadása beállítás elutasítás