⊗jsrxPmATInr 45 of 57 menu

Ներածություն Redux-ի thunks-ին

Նախորդ գլխում մենք կազմակերպեցինք սերվերի, տվյալների բազայի և կլիենտի աշխատանքը տվյալների փոխանակման համար: Այժմ մեզ անհրաժեշտ է կառուցել վերջին կամուրջը, որն օգնելու է մեր 'սինխրոն' կազմակերպված Redux հավելվածին փոխազդել ասինխրոն կլիենտի հետ, որը մենք ստեղծեցինք նախորդ գլխի վերջին դասին, հարցումներ ուղարկելու և անհրաժեշտ տվյալները պատասխանում ստանալու համար:

Ինչպես հիշում ենք նախորդ բաժնի առաջին դասերից, Redux-ը ոչինչ չգիտի ասինխրոն տրամաբանության հետ աշխատելու մասին, և դրա համար մենք կօգտագործենք thunk middleware: Այս middleware-ը թույլ է տալիս աշխատել ուղարկված actions-ների հետ, օգտագործել մեր thunk-ի կոդում dispatch և getState store-ի մեթոդները, ինչպես նաև օգնել 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-ները գրվում են slice-ֆայլերում, ապա մենք կբացենք ֆայլը productsSlice.js:

Ուրախ լուրն այն է, որ մեզ պետք չ է զբաղվել Redux Thunk-ի տեղադրմամբ, քանի որ configureStore ֆունկցիան RTK-ից արդեն դա կանի մեզ համար: Ուստի պարզապես ավելացնենք createAsyncThunk իմպորտը ֆայլում.

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

Նաև ավելացնենք իմպորտում մեր կլիենտը.

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

Եվ այժմ createAsyncThunk-ի օգնությամբ ստեղծենք մեր առաջին thunk-ը ապրանքները ստանալու համար, դա անենք անմիջապես initialState օբյեկտի հայտարարումից հետո.

export const fetchProducts = createAsyncThunk()

createAsyncThunk-ի առաջին պարամետրը կընդունի տող գեներացվող էքշնի տիպի համար, իսկ երկրորդը՝ payload-ի համար նախատեսված callback-ֆունկցիան, որը արդյունքում կվերադարձնի կամ տվյալներ, կամ սխալով պրոմիս (տեսեք ֆայլը client.js): Ֆունկցիայի կոդում մենք կանչում ենք client.get և փոխանցում ենք դրան ուղին, որը մենք նշեցինք սերվերում (նայեք ընդունվող պարամետրերը http.getserver.js-ում).

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

Բացեք ձեր ուսանողների հավելվածը: Բացեք դրա մեջ studentsSlice.js ֆայլը: Իմպորտացրեք դրա մեջ createAsyncThunk ֆունկցիան thunk ստեղծելու համար, ինչպես նաև client-ը API հարցումներ սերվեր ուղարկելու համար:

Անմիջապես initialState օբյեկտի հայտարարումից հետո createAsyncThunk-ի օգնությամբ ստեղծեք thunk fetchStudents ուսանողների ցանկը ստանալու համար, որը կուղարկի GET-հարցում /fakeServer/students հասցեով, նշված ձեր server.js ֆայլում, և կվերադարձնի response.data, ինչպես ցուցադրված է դասի նյութերում: Որպես createAsyncThunk-ի առաջին պարամետր նշեք տողը students/fetchStudents էքշնի տիպի համար:

Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել