⊗jsrxPmRDARR 32 of 57 menu

Reducerin lisääminen Redux-sovellukseen

Edellisessä oppitunnissa loimme komponentin UserReaction, jotta jokaisella tuotteella olisi myös käyttäjien reaktiot. Nyt meidän on kirjoitettava reducer, joka käsittelee reaktiolaskuria kun käyttäjä napsauttaa mitä tahansa reaktionappia.

Avataanpa tuotesovelluksemme, ja siellä tiedosto productsSlice.js, joka sisältää kaikki reducerit. Nyt luomme reducers-ominaisuuteen vielä yhden reducerin reactionClicked (voimme laittaa sen ensimmäiseksi - ennen productAdded:ia, vaikkei sillä ole väliä). Kuten yleensä, välitämme sille parametreina state ja action:

reactionClicked(state, action) {},

Ja nyt aaltosulkeiden sisään, jotka jätimme tyhjiksi edellisessä vaiheessa, kirjoitamme sille koodin. Ensinnäkin puremme tuotteen id:n payload-objektista action ja reaktion nimen:

const { productId, reaction } = action.payload

Sitten saadusta tilasta haetaan tarvittava tuote:

const currentProduct = state.find(product => product.id === productId)

Ja jos tällainen tuote on olemassa, kasvatetaan annetun reaktion arvoa 1:llä:

if (currentProduct) { currentProduct.reactions[reaction]++ }

Siinä kaikki, koodimme reactionClicked:lle on valmis:

reactionClicked(state, action) { const { productId, reaction } = action.payload const currentProduct = state.find(product => product.id === productId) if (currentProduct) { currentProduct.reactions[reaction]++ } },

Lisätään tiedoston loppuun saadun action creatorin vienti:

export const { reactionClicked, productAdded, productUpdated } = productsSlice.actions

Tässä on huomioitava kaksi tärkeää seikkaa. Kuten muistat aiemmista oppitunneista - arvoa on kiellettyä päivittää suoraan näin reducerin koodissa (katso tätä riviä: reactions[reaction]++), mutta meillä se menee läpi, koska teemme sen createSlice:n sisällä, joka käyttää Immer-kirjastoa. Se huolehtii siitä, että koodimme muunnetaan "turvalliseksi" arvon päivitykseksi. Tämä antaa meille mahdollisuuden kirjoittaa monimutkaisia asioita yksinkertaisemmin.

Seuraava asia, joka on muistettava - action-objektin tulee sisältää mahdollisimman vähän tietoa - vain sen verran, että voidaan osoittaa, mitä tapahtui. Siinä ei pidä tehdä mitään laskelmia. Kaikki tilan päivittämiseen tarvittavat laskelmat on tehtävä reducerissa, tähän voidaan kirjoittaa niin paljon logiikkaa kuin tarvitaan.

Avaa opiskelijasovelluksesi ja lisää tiedostoon studentsSlice.js vielä yksi reduceri voteClicked reducers-kenttään, kuten oppitunnissa näytetään. Kirjoita sille koodi. Reducerisi tehtävänä on napsautuksen yhteydessä kasvattaa kyseisen opiskelijan napsautetun vote:n (tai äänen) arvoa 1:llä.

Älä unohda viedä saatua voteClicked action creatoria tiedoston lopussa.

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ää