⊗jsrxPmATDT 54 of 57 menu

Tietojen lähettäminen thunkin avulla Reduxissa

Edellisellä tunnilla käsittelimme POST-pyynnän käsittelyä meidän feikkipalvelimellamme. Nyt kirjoitamme thunk-funktion, joka lähettää pyynnön palvelimelle.

Avataan sovelluksemme tuotteiden kanssa, ja siinä tiedosto productsSlice.js. Nyt thunk fetchProducts jälkeen luomme createAsyncThunk:n avulla thunkin addProduct:

export const addProduct = createAsyncThunk()

Ensimmäisenä parametrina välitämme createAsyncThunk:iin 'products/addProduct', ja toisena asynkronisen callbackin, joka ottaa vastaan objektin uuden tuotteen tiedoilla:

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

Tämän callbackin koodissa kutsumme clienttiä, antaen sille parametreina polun ja objektin tuotteen kanssa, ja palautamme sitten vastauksen tiedot:

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

Nyt katsotaan alempana koodissa kenttään reducers kohteelle productsSlice. Aiemmin lisäsimme uuden tuotteen käyttämällä reduceria productAdded, jossa meillä oli metodit reducer ja prepare. Nyt generoimme tarvittavat tiedot palvelimella ja työskentelemme thunkin kanssa, joten poistamme täältä kokonaan reducerin productAdded koodista. Ja sitten lisäämme metodiin extraReducers (sen koodin loppuun) vielä yhden lisäreducerin, joka onnistuneen pyynnön tapauksessa lisää sliceen products uuden tuotteen suoraan payload:sta actionista (muista, että tällainen koodi on mahdollista vain createSlice:n ansiosta):

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

Kyllä, muuten, älä unohda poistaa nanoidia import-riveiltä, ja productAdded exportista actioneiden joukosta tiedoston lopussa.

Avaa opiskelijasovelluksesi. Avaa siinä tiedosto studentsSlice.js. createAsyncThunk:n avulla luo toinen thunk addStudent, joka lähettää POST-pyynnön palvelimelle lisätäkseen uuden opiskelijan, kuten oppitunnilla näytetään.

Seuraavaksi tee alempana muutoksia kohteelle studentsSlice: poista kokonaan reducer studentAdded propertystä reducers. Ja kenttään extraReducers lisää lisä reducer, joka lisää uuden opiskelijan sliceen students payload:sta actionista onnistuneen pyynnön tapauksessa, kuten oppitunnilla näytetään.

Suomi
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Käytämme evästeitä verkkosivuston toiminnalle, analytiikalle ja personoinnille. Tietojen käsittely tapahtuu Tietosuojakäytännön mukaisesti.
hyväksy kaikki mukauta hylkää