⊗jsrxPmATDT 54 of 57 menu

Испраќање на податоци со помош на thunk во Redux

На претходната лекција се занимававме со обработка на POST-барање на нашиот лажен сервер. Ајде сега да напишеме thunk-функција која ќе испраќа барање до серверот.

Да ја отвориме нашата апликација со производи, а во неа датотеката productsSlice.js. Сега после thunk fetchProducts со помош на createAsyncThunk ќе создадеме thunk addProduct:

export const addProduct = createAsyncThunk()

Како прв параметар ќе му пренесеме на createAsyncThunk 'products/addProduct', а како втор асинхрони callback, кој ќе прифаќа објект со податоци за новиот производ:

export const addProduct = createAsyncThunk( 'products/addProduct', async (newProduct) => {} )

Во кодот на овој колбек ќе го повикаме клиентот, пренесувајќи му ги како параметри патот и објектот со производот, а потоа ќе ги вратиме податоците од одговорот:

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

Сега подолу во кодот да го погледнеме полето reducers за productsSlice. Претходно додававме нов производ со помош на редјусерот productAdded, во кој имавме методи reducer и prepare. Сега ги генерираме потребните податоци на серверот и работиме со thunk, затоа овде целосно ќе го отстраниме редјусерот productAdded од кодот. А потоа ќе внесеме во методот extraReducers (на крајот од неговиот код) уште еден дополнителен редјусер, кој во случај на успешно барање ќе го додава во слајсот products новиот производ директно од payload на акцијата (се сеќаваме, таков код е возможен само благодарение на неповторливиот createSlice):

.addCase(addProduct.fulfilled, (state, action) => { state.products.push(action.payload) })

Да, патем, не заборавајте да го отстраните nanoid од редовите со импорт, а productAdded од експортот на акциите на крајот од датотеката.

Отворете ја вашата апликација со студенти. Отворете ја во неа датотеката studentsSlice.js. Со помош на createAsyncThunk создадете уште еден thunk addStudent, кој ќе испраќа POST-барање до серверот, за да додадете нов студент, како што е прикажано на часот.

Потоа подолу внесете ги промените за studentsSlice: отстранете го целосно редјусерот studentAdded во својството reducers. А во полето extraReducers додадете дополнителен редјусер, кој ќе додава нов студент во слајсот students од payload на акцијата во случај на успешно барање, како што е прикажано на часот.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј