⊗jsrxPmRDDA 33 of 57 menu

Адпраўка action у Redux дадатку

Цяпер у нас ёсць рэдьюсер для абнаўлення слайса з рэакцыямі. Зараз нам неабходна дадаць адпраўку 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 самі. Гэтую ж уласцівасць нам неабходна дадаць ніжэй у код для рэдьюсера 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, затым імпартуем у яго хук useDispatch і reactionClicked:

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

У пачатку коду ў целе функцыі UserReactions першай строчкай (перад const userReactions ... ) пропiшем:

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 з адпаведнымі палямі. Зрабіце гэта і для рэдьюсера studentAdded.

Унутры функцыі UserVotes у файле UserVotes.jsx завядзіце dispatch для хука useDispatch і зрабіце адпраўку экшэна voteClicked па кліку на кнопкі галасавання, перадайце яму id студэнта і назву vote, падобна да таго, як паказана ў уроку.

Вывядзіце кнопачкі для галасавання ў верстцы для кампанентаў StudentsList і StudentPage.

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