⊗jsrxPmRDARR 32 of 57 menu

Дадаванне рэдʼюсара ў Redux прыкладанне

У мінулым уроке мы стварылі кампанент UserReaction для таго, каб у кожнага прадукту былі яшчэ і рэакцыі карыстальнікаў. Цяпер нам трэба напісаць рэдʼюсер, які будзе апрацоўваць лічыльнік рэакцый пры кліку карыстальнікам па кнопцы той ці іншай рэакцыі.

Давайце адкрыем наша прыкладанне з прадуктамі, а ў ім файл productsSlice.js з усімі рэдʼюсерамі. Цяпер у ўласцівасці reducers створым яшчэ адзін рэдʼюсер reactionClicked (можам паставіць яго першым - перад productAdded, хоць гэта без розніцы). Як звычайна, перададзім яму параметрамі state і action:

reactionClicked(state, action) {},

А цяпер унутры фігурных дужак, якія мы пакінулі пустымі на папярэднім кроку, напішам для яго код. Па-першае мы здабудзем id прадукту з payload абʼекта action і назву рэакцыі:

const { productId, reaction } = action.payload

Затым з перададзенага стэйту атрымаем патрэбны прадукт:

const currentProduct = state.find(product => product.id === productId)

І калі такі прадукт маецца, то павялічым значэнне перададзенай рэакцыі на 1:

if (currentProduct) { currentProduct.reactions[reaction]++ }

Вось і ўсё, наш код для reactionClicked гатовы:

reactionClicked(state, action) { const { productId, reaction } = action.payload const currentProduct = state.find(product => product.id === productId) if (currentProduct) { currentProduct.reactions[reaction]++ } },

Давайце ў канцы файла дадамо экспарт атрыманага action creator:

export const { reactionClicked, productAdded, productUpdated } = productsSlice.actions

Тут неабходна адзначыць два важныя моманты. Як вы памятаеце з папярэдніх урокаў - абнаўляць вось так напрамую значэнне ў кодзе рэдʼюсара нельга (паглядзіце на гэты радок: reactions[reaction]++), але нам сойдзе гэта з рук, таму што мы гэта робім унутры createSlice, які выкарыстоўвае бібліятэку Immer. Яна і паклапоціцца пра тое, каб перарабіць наш код у "бяспечнае" абнаўленне значэння. Гэта дазваляе нам пісаць складаныя рэчы больш простым спосабам.

Наступнае, што неабходна памятаць - абʼект action павінен змяшчаць мінімальна магчымая колькасць інфармацыі - толькі для таго каб паказаць што адбылося. Не варта рабіць у ім якія-небудзь вылічэнні. Усе вылічэнні для абнаўлення стэйту варта рабіць у рэдʼюсары, тут можна напісаць для гэтага столькі логікі, колькі патрабуецца.

Адкрыйце ваша прыкладанне са студэнтамі і ў файле studentsSlice.js дадайце яшчэ адзін рэдʼюсер voteClicked у поле reducers, як паказана ў уроку. Напішыце код для яго. Задача вашага рэдʼюсара - пры кліку павялічваць значэнне vote (ці голасу), па якому клікнулі, для дадзенага студэнта, на 1.

У канцы файла не забыйцеся экспартаваць атрыманы action creator voteClicked.

Беларуская
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 для працы сайта, аналітыкі і персаналізацыі. Апрацоўка дадзеных адбываецца згодна Палітыкай канфідэнцыяльнасці.
прыняць усе наладзіць адхіліць