⊗jsrxPmRDDA 33 of 57 menu

Skicka action i Redux-applikationen

Nu har vi en reducer för att uppdatera slice med reaktioner. Nu behöver vi lägga till att en action skickas, vilket kommer att utlösas när användaren klickar på en knapp med en reaktion. Men först, för att allt ska fungera helt, måste vi göra några ändringar.

Låt oss öppna vår produktapplikation, och i den filen productsSlice.js. Titta på definitionen av initialState. Ser du? I objekten finns ingen egenskap med reaktioner. Låt oss åtgärda detta genom att sätta räknarna för varje reaktion till 0:

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

Till det andra objektet för initiering, lägg till egenskapen reactions själv. Denna egenskap måste vi också lägga till längre ner i koden för reducern productAdded, så att nya produkter också har denna funktionalitet. Låt oss göra detta för dess metod prepare:

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

Nu ska vi börja med att skicka actions. Låt oss öppna filen UserReactions.jsx, sedan importera hooken useDispatch och reactionClicked i den:

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

I början av koden i funktionens kropp UserReactions på första raden (före const userReactions ... ) skriver vi:

const dispatch = useDispatch()

Och vi lägger till att skicka reactionClicked vid klick på reaktionsknappen, samtidigt som vi skickar med produktens id och namnet på reaktionen som klickades på:

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

Nu återstår det för oss att rendera komponenten med reaktioner i vyn för våra sidor. Låt oss göra detta i filen ProductsList.jsx före elementet Link:

<UserReactions product={product} />

Och precis på samma sätt före elementet Link på produktsidan i filen ProductPage.jsx:

<UserReactions product={product} />

Nu när allt har fallit på plats, kan vi starta vår applikation. Låt oss försöka klicka på reaktionsknapparna. Vi kan lägga till en ny produkt och även trycka på dem. Nu, oavsett var vi klickar på reaktionsknapparna, kommer de ändrade värdena att visas för denna produkt på alla sidor. Titta på sidan för en enskild produkt (där du klickade på reaktioner) och sidan med deras lista och tvärtom, för alla sidor kommer antalet reaktioner för en specifik produkt att vara detsamma.

Den här lektionen var den avslutande i kapitlet om att arbeta med data i Redux. Vi har arbetat mer fördjupat med data i Redux store och vet nu hur man lägger till den funktionalitet vi behöver i applikationen och använder data i React- komponenter.

Öppna din studentapplikation. I filen studensSlice.js, lägg till egenskapen votes till objekten för initiering med motsvarande fält. Gör detta även för reducern studentAdded.

Inuti funktionen UserVotes i filen UserVotes.jsx, skapa en dispatch för hooken useDispatch och gör en utskick av action voteClicked vid klick på omröstningsknapparna, skicka studentens id och namnet på vote, liknande hur det visas i lektionen.

Rendera knapparna för omröstning i vyn för komponenterna StudentsList och StudentPage.

Svenska
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi använder kakor för webbplatsens funktion, analys och personalisering. Behandling av data sker i enlighet med Integritetspolicyn.
acceptera alla anpassa avvisa