⊗jsrxPmATInr 45 of 57 menu

Įvadas į thunks Redux

Ankstesniame skyriuje mes organizavome serverio, duomenų bazės ir kliento darbą duomenų apsikeitimui. Dabar mums reikia nutiesti paskutinį tiltelį, kuris padės mūsų 'sinchroniškai' organizuotai Redux programėlei sąveikauti su asinchroniniu klientu, kurį sukūrėme paskutinėje ankstesnio skyriaus pamokoje, kad siųstume užklausas ir gautume reikiamus duomenis atsakyme.

Kaip prisimename iš pirmųjų ankstesnio skyriaus pamokų, Redux nieko nežino apie darbą su asinchronine logika, ir tam mes naudosime thunk middleware. Šis middleware leidžia dirbti su išsiųstais actions, naudoti mūsų thunk kode dispatch ir getState store metodus, taip pat padėti metodui dispatch dirbti ne tik su įprastais JS objektais, bet ir su tokiomis esybėmis, kaip funkcijos ir promisai.

Paprastai thunk-funkcija iškviečiama su dviem argumentais dispatch ir getState (jei reikia), kuriais galima naudotis šios funkcijos kūne. Jos pagalba galima siųsti įprastus action. Taip pat ją galima siųsti per store.dispatch. Tokios funkcijos pavyzdys pateiktas žemiau:

const changeColorThunk = (dispatch, getState) => { const colorBefore = getState() console.log(`Sena Spalva: ${colorBefore.color}`) dispatch(changeColor()) const colorAfter = getState() console.log(`Nauja Spalva: ${colorAfter.color}`) } store.dispatch(changeColorThunk)

Dabar atidarykime mūsų produktų programėlę. Pirmas dalykas, kurį turime gauti iš serverio paleidus programėlę - tai produktų sąrašas. Kadangi paprastai thunks rašomi slice failuose, mes atidarysime failą productsSlice.js.

Džiugi naujiena ta, kad mums nereikia vargintis su Redux Thunk įdiegimu, nes funkcija configureStore iš RTK jau tai padarys už mus. Todėl tiesiog pridėkime createAsyncThunk į importą faile:

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

Taip pat pridėkime į importą ir mūsų klientą:

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

O dabar pagalba createAsyncThunk sukurkime mūsų pirmąjį thunk produktų gavimui, padarykime tai iškart po objekto initialState deklaracijos:

export const fetchProducts = createAsyncThunk()

Pirmuoju parametru createAsyncThunk bus priimti eilutę sugeneruoto action tipui, o antruoju - callback-funkciją payload, kuri kaip rezultatą grąžins arba duomenis, arba promise su klaida (žiūrėkite failą client.js). Funkcijos kode mes iškviečiame client.get ir perduodame jam kelią, kurį nurodėme serveryje (pažiūrėkite priimamus parametrus http.get server.js):

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

Atidarykite savo studentų programėlę. Atidarykite joje failą studentsSlice.js. Importuokite į jį funkciją createAsyncThunk thunk kūrimui, taip pat client API užklausų siuntimui į serverį.

Iškart po objekto initialState deklaracijos pagalba createAsyncThunk sukurkite thunk fetchStudents studentų sąrašo gavimui, kuris siųstų GET užklausą adresu /fakeServer/students, nurodytu jūsų faile server.js, ir grąžintų response.data, kaip parodyta pamokos medžiagoje. Kaip pirmą parametrą createAsyncThunk nurodykite eilutę students/fetchStudents action tipui.

Lietuvių
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Mes naudojame slapukus svetainės veikimui, analizei ir personalizavimui. Duomenų apdorojimas vyksta pagal Privatumo politiką.
priimti visus nustatyti atšaukti