⊗jsrxPmRDDA 33 of 57 menu

Trimiterea acțiunilor în aplicația Redux

Acum avem un reducer pentru actualizarea slice-ului cu reacții. În acest moment, trebuie să adăugăm trimiterea unei acțiuni care să se declanșeze atunci când utilizatorul face clic pe butonul cu reacția. Dar mai întâi, pentru ca totul să funcționeze complet, trebuie să facem câteva modificări.

Să deschidem aplicația noastră cu produse, iar în ea fișierul productsSlice.js. Priviți definiția initialState. Vedeți? În obiecte nu există o proprietate cu reacții. Să reparăm asta, setând contoarele fiecărei reacții la 0:

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

În al doilea obiect pentru inițializare, adăugați proprietatea reactions singur. Această proprietate trebuie să fie adăugată mai jos în cod pentru reducer-ul productAdded, astfel încât noile produse să aibă și ele această funcționalitate. Să facem asta pentru metoda sa prepare:

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

Acum să începem trimiterea acțiunii. Să deschidem fișierul UserReactions.jsx, apoi să importăm în el hook-ul useDispatch și reactionClicked:

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

La începutul codului, în corpul funcției UserReactions, prima linie (înainte de const userReactions ... ) să scriem:

const dispatch = useDispatch()

Și să atașăm butonului de reacție trimiterea reactionClicked la clic, în acest caz va fi transmis id-ul produsului și numele reacției pe care s-a făcut clic:

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

Acum ne rămâne să afișăm componentul cu reacții în markup pentru paginile noastre. Să facem asta în fișierul ProductsList.jsx înaintea elementului Link:

<UserReactions product={product} />

Și exact la fel înaintea elementului Link pe pagina produsului în fișierul ProductPage.jsx:

<UserReactions product={product} />

Acum, când totul a fost pus la locul său, putem porni aplicația noastră. Să încercăm să facem clic pe butoanele cu reacții. Putem adăuga un produs nou și, de asemenea, să apăsăm pe ele. Acum, oriunde am face clic pe butoanele cu reacții, valorile modificate vor fi afișate pentru acest produs pe toate paginile. Priviți pagina produsului individual (pe care ați făcut clic pe reacții) și pagina cu lista lor și invers, pentru toate paginile, numărul de reacții pentru un anumit produs va fi același.

Această lecție a fost finală în capitolul despre lucrul cu date în Redux. Am lucrat mai aprofundat cu datele din Redux store și acum știm, cum să adăugăm funcționalitatea de care avem nevoie în aplicație și să folosim date în componentele React.

Deschideți aplicația voastră cu studenți. În fișierul studensSlice.js, obiectelor pentru inițializare adăugați proprietatea votes cu câmpurile corespunzătoare. Faceți asta și pentru reducer-ul studentAdded.

În interiorul funcției UserVotes din fișierul UserVotes.jsx, declarați dispatch pentru hook-ul useDispatch și faceți trimiterea acțiunii voteClicked la clic pe butoanele de votare, transmiteți -i id-ul studentului și numele vote, similar cu modul arătat în lecție.

Afișați butoanele pentru votare în markup pentru componentele StudentsList și StudentPage.

Română
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Folosim cookie pentru funcționarea site-ului, analiză și personalizare. Prelucrarea datelor are loc în conformitate cu Politica de confidențialitate.
acceptă toate configurează respinge