⊗jsrxPmRDDA 33 of 57 menu

Actionin lähettäminen Redux-sovelluksessa

Nyt meillä on reduceri reaktioiden slice:n päivittämiseksi. Seuraavaksi meidän on lisättävä actionin lähetys, joka aktivoituu, kun käyttäjä klikkaa reaktiopainiketta. Mutta ennen kuin kaikki toimii täysin, meidän on tehtävä muutamia muutoksia.

Avataan tuotesovelluksemme, ja siellä tiedosto productsSlice.js. Katso määritelmää initialState. Näetkö? Objekteissa ei ole reaktioiden ominaisuutta. Korjataan tämä asettaen kunkin reaktion laskurit arvoon 0:

{ id: '1', title: 'Product1', desc: 'This is an amazing product', price: '300', amount: '30', reactions: { good: 0, soso: 0, bad: 0, }, },

Lisää toiseen alustusobjektiin ominaisuus reactions itse. Tämä sama ominaisuus on lisättävä alemmas koodiin reducerille productAdded, jotta uusissa tuotteissa on myös tämä toiminnallisuus. Tehdään tämä sen metodille prepare:

prepare(title, desc, price, amount, sellerId) { return { payload: { id: nanoid(), title, desc, price, amount, seller: sellerId, reactions: { good: 0, soso: 0, bad: 0, }, }, } },

Nyt siirrytään actionin lähetykseen. Avataan tiedosto UserReactions.jsx, sitten tuodaan siihen hook useDispatch ja reactionClicked:

import { useDispatch } from 'react-redux' import { reactionClicked } from './productsSlice'

Koodin alussa funktion UserReactions rungossa ensimmäisellä rivillä (ennen const userReactions ... ) kirjoitetaan:

const dispatch = useDispatch()

Ja asetetaan reaktiopainikkeelle lähetys reactionClicked klikkauksen yhteydessä, samalla lähetetään tuotteen id ja klikatun reaktion nimi:

<button key={name} type="button" className="reaction-button" onClick={() => dispatch(reactionClicked({ productId: product.id, reaction: name })) } > {image} {product.reactions[name]} </button>

Nyt meidän on vielä näytettävä komponentti reaktioilla markupissamme sivuillemme. Tehdään tämä tiedostossa ProductsList.jsx elementin Link edellä:

<UserReactions product={product} />

Ja täsmälleen samalla tavalla elementin Link edellä tuotesivulla tiedostossa ProductPage.jsx:

<UserReactions product={product} />

Nyt kun kaikki on kunnossa, voimme käynnistää sovelluksemme. Kokeillaan klikata reaktiopainikkeita. Voimme lisätä uuden tuotteen ja myös painella niitä. Nyt missä tahansa klikkaammekaan reaktiopainikkeita, muuttuneet arvot näytetään kyseiselle tuotteelle kaikilla sivuilla. Katso erillistä tuotesivua (jossa klikkasit reaktioita) ja niiden listasivua ja päinvastoin, kaikilla sivuilla reaktioiden määrä tietyn tuotteen kohdalla on sama.

Tämä oppitunti oli luvun lopettava datan käsittelyyn liittyen Reduxissa. Työskentelimme syventävämmin datan kanssa Redux store:ssa ja nyt tiedämme, kuinka lisätä tarvitsemamme toiminnallisuus sovellukseen ja käyttää dataa React komponenteissa.

Avaa opiskelijasovelluksesi. Tiedostossa studensSlice.js lisää alustusobjekteille ominaisuus votes vastaavine kentineen. Tee tämä myös reducerille studentAdded.

Funktion UserVotes sisällä tiedostossa UserVotes.jsx määritä dispatch hookille useDispatch ja tee actionin voteClicked lähetys klikatessa äänestyspainikkeita, välitä sille opiskelijan id ja vote:n nimi, vastaavasti kuin oppitunnissa on esitetty.

Tulosta äänestyspainikkeet markuppiin komponenteissa StudentsList ja StudentPage.

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