⊗jsrxPmATInr 45 of 57 menu

Redux-та thunks-пен таныстыру

Алдыңғы тарауда біз деректер алмасу үшін серверді, деректер базасын және клиентті ұйымдастырдық. Енді бізге біздің 'синхронды' ұйымдастырылған Redux қолданбасымызды асинхронды клиентпен өзара әрекеттесуге көмектесетін соңғы көпірді салу қажет, оны біз өткен тараудың соңғы сабағында сұраулар жіберу және жауапта қажетті деректерді алу үшін жасаған болатынбыз.

Біз алдыңғы бөлімнің алғашқы сабақтарынан еске алатынымыздай, Redux асинхронды логикамен жұмыс істеуді білмейді және бұл үшін біз thunk middleware қолданамыз. Бұл middleware жіберілген actions-термен жұмыс істеуге, біздің thunk кодымызда store-дың dispatch және getState әдістерін пайдалануға, сонымен қатар dispatch әдісіне жай JS объектілерімен ғана емес, сонымен қатар функциялар мен промисстер сияқты нәрселермен де жұмыс істеуге көмектеседі.

Әдетте thunk-функция екі аргументпен dispatch және getState (қажет болған жағдайда) шақырылады, оларды осы функцияның денесінде пайдалануға болады. Оның көмегімен қарапайым экшендерді жіберуге болады. Сонымен қатар оны store.dispatch арқылы жіберуге болады. Мұндай функцияның мысалы төменде келтірілген:

const changeColorThunk = (dispatch, getState) => { const colorBefore = getState() console.log(`Ескі Түс: ${colorBefore.color}`) dispatch(changeColor()) const colorAfter = getState() console.log(`Жаңа Түс: ${colorAfter.color}`) } store.dispatch(changeColorThunk)

Енді өнімдерімізбен қолданбамызды ашайық. Бізге қолданбаны іске қосқан кезде серверден алғаш рет алуымыз керек нәрсе - бұл өнімдер тізімі. Әдетте thunks-тар слайс-файлдарында жазылатындықтан, біз productsSlice.js файлын ашамыз.

Жағымды жаңалық мынада, бізге Redux Thunk орнатумен аунақтаудың қажеті жоқ, себебі RTK-тен configureStore функциясы бұны біз үшін дайын жасайды. Сондықтан файлдағы импортқа createAsyncThunk қосамыз:

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

Сондай-ақ импортқа біздің клиентімізді де қосамыз:

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

Енді createAsyncThunk көмегімен өнімдерді алу үшін біздің бірінші thunk-ты жасаймыз, мұны initialState объектісін жариялағаннан кейін бірден орындаймыз:

export const fetchProducts = createAsyncThunk()

createAsyncThunk бірінші параметр ретінде жасалатын action түрі үшін жолды қабылдайды, ал екіншісі - payload үшін колбэк-функцияны, ол нәтижеде не деректерді, не қателікпен промиссты қайтарады (client.js файлын қараңыз). Функция кодында біз client.get шақырамыз және оған біз серверде көрсеткен жолды береміз (server.js файлындағы http.get қабылдайтын параметрлерді қараңыз):

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

Студенттеріңізбен қолданбаңызды ашыңыз. Онда studentsSlice.js файлын ашыңыз. Онда thunk жасау үшін createAsyncThunk функциясын, сондай-ақ серверге API сұрауларын жіберу үшін client импорттаңыз.

initialState объектісін жариялағаннан кейін бірден createAsyncThunk көмегімен студенттер тізімін алу үшін fetchStudents thunk-ын жасаңыз, ол /fakeServer/students мекенжайына GET-сұрау жібереді, server.js файлында көрсетілген, және сабақ материалдарында көрсетілгендей response.data қайтарады. createAsyncThunk үшін бірінші параметр ретінде action түрі үшін students/fetchStudents жолын көрсетіңіз.

Қазақ
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañ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 файлдарын қолданамыз. Деректерді өңдеу Құпиялылық саясаты бойынша жүреді.
барлығын қабылдау баптау қабылдамау