⊗jsrxPmRDDA 33 of 57 menu

Испраќање на action во Redux апликација

Сега имаме reducer за ажурирање на slice-от со реакции. Во моментов ни е потребно да додадеме испраќање на action, која ќе се активира при кликнување на корисникот на копчето за реакција. Но, пред тоа, за сè целосно да работи, треба да направиме неколку промени.

Ајде да ја отвориме нашата апликација со производи, а во неа датотеката productsSlice.js. Погледнете го дефинирањето на initialState. Гледате? Во објектите нема својство за реакции. Ајде да го поправиме ова, поставувајќи ги бројачите на секоја од реакциите на 0:

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

Во вториот објект за иницијализација, додадете го својството reactions самите. Ова својство ни е потребно да го додадеме и подолу во кодот за reducer-от productAdded, за во новите производи да постои и таква функционалност. Ајде да го направиме ова за неговиот метод prepare:

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

Сега да преминеме на испраќањето на action. Ајде да ја отвориме датотеката UserReactions.jsx, потоа да ги импортираме во неа hook-от useDispatch и reactionClicked:

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

На почетокот на кодот во телото на функцијата UserReactions во првиот ред (пред const userReactions ... ) да го запишеме:

const dispatch = useDispatch()

И на копчето за реакција ќе ја додадеме испраќањето на reactionClicked при клик, при што ќе се пренесува id на производот и името на реакцијата, на која што се кликнало:

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

Сега ни останува да го прикажеме компонентот со реакции во верстката за нашите страници. Да го направиме ова во датотеката ProductsList.jsx пред елементот Link:

<UserReactions product={product} />

И на ист начин пред елементот Link на страницата на производот во датотеката ProductPage.jsx:

<UserReactions product={product} />

Сега, кога сè е на своето место, може да ја стартуваме нашата апликација. Ајде да пробаме да кликнуваме на копчињата за реакции. Можеме да додадеме нов производ и исто така да ги притиснеме нив. Сега, каде и да кликнеме на копчињата со реакции, променетите вредности ќе се прикажуваат за тој производ на сите страници. Погледнете ја страницата на одделниот производ (на која кликнавте на реакции) и страницата со нивниот список и обратно, за сите страници бројот на реакции за конкретниот производ ќе биде ист.

Оваа лекција беше последна во поглавјето за работа со податоци во Redux. Ние подлабоко работивме со податоците во Redux store и сега знаеме, како да ги додаваме потребните функционалности во апликацијата и да ги користиме податоците во React компонентите.

Отворете ја вашата апликација со студенти. Во датотеката studensSlice.js на објектите за иницијализација додадете својство votes со соодветните полиња. Направете го ова и за reducer-от studentAdded.

Внатре во функцијата UserVotes во датотеката UserVotes.jsx воведете dispatch за hook-от useDispatch и направете испраќање на action-от voteClicked при кликнување на копчињата за гласање, пренесете му id на студентот и името на vote, слично како што е прикажано во лекцијата.

Прикажете ги копчињата за гласање во верстката за компонентите StudentsList и StudentPage.

Македонски
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Ние користиме колачиња за работата на веб-страната, анализа и персонализација. Обработката на податоци се врши во согласност со Политиката за приватност.
прифати ги сите прилагоди одбиј