⊗jsrxPmRDARR 32 of 57 menu

Redux հավելվածում reducer-ի ավելացում

Նախորդ դասում մենք ստեղծեցինք UserReaction բաղադրիչը, որպեսզի յուրաքանչյուր ապրանք ունենա նաև օգտագործողի ռեակցիաներ: Այժմ մեզ անհրաժեշտ է գրել reducer, որը կմշակի ռեակցիաների հաշվիչը, երբ օգտագործողը կտտացնի այս կամ այն ռեակցիայի կոճակին:

Եկեք բացենք մեր ապրանքների հավելվածը, և դրա մեջ productsSlice.js ֆայլը բոլոր reducer-ներով: Այժմ reducers հատկության մեջ կստեղծենք ևս մեկ reducer reactionClicked (կարող ենք այն դնել առաջինը - productAdded-ից առաջ, չնայած դա նշանակություն չունի): Ինչպես միշտ, կփոխանցենք նրան պարամետրերով state և action:

reactionClicked(state, action) {},

Իսկ այժմ նախորդ քայլում դատարկ թողած գանգուր փակագծերի ներսում գրենք դրա համար կոդ: Նախ և առաջ մենք կարդացնենք ապրանքի id-ն action օբյեկտի payload-ից և ռեակցիայի անվանումը:

const { productId, reaction } = action.payload

Այնուհետև փոխանցված state-ից կստանանք անհրաժեշտ ապրանքը:

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

Այստեղ անհրաժեշտ է նշել երկու կարևոր կետ: Ինչպես հիշում եք նախորդ դասերից - այսպես ուղղակիորեն թարմացնել արժեքը reducer-ի կոդում անհնար է (նայեք այս տողին: reactions[reaction]++), բայց մեզ դա կներառվի, քանի որ մենք դա անում ենք createSlice-ի ներսում, որն օգտագործում է Immer գրադարանը: Այն և կհոգա, որ մեր կոդը վերափոխի «անվտանգ» արժեքի թարմացման: Սա մեզ թույլ է տալիս գրել բարդ բաներ ավելի պարզ եղանակով:

Հաջորդը, ինչը պետք է հիշել - action օբյեկտը պետք է պարունակի նվազագույն հնարավոր տեղեկություն՝ միայն նշելու համար, թե ինչ է տեղի ունեցել: Չարժե դրա մեջ որևէ հաշվարկ կատարել: Բոլոր հաշվարկները state-ը թարմացնելու համար պետք է կատարվեն reducer-ում, այստեղ դրա համար կարելի է գրել ցանկացած տրամաբանություն, որքան էլ որ այն պահանջվի:

Բացեք ձեր ուսանողների հավելվածը և studentsSlice.js ֆայլում ավելացրեք ևս մեկ reducer voteClicked reducers դաշտում, ինչպես ցուցադրված է դասում: Գրեք դրա համար կոդ: Ձեր reducer-ի խնդիրն է՝ կտտոցի դեպքում ավելացնել vote (կամ ձայնի) արժեքը, որի վրա կտտացել են, տվյալ ուսանողի համար, 1-ով:

Ֆայլի վերջում մի մոռացեք արտահանել ստացված voteClicked action creator-ը:

Հայերեն
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Մենք օգտագործում ենք cookie-ներ կայքի աշխատանքի, վերլուծության և անհատականացման համար։ Տվյալների մշակումը կատարվում է համաձայն Գաղտնիության քաղաքականության։
ընդունել բոլորը կարգավորել մերժել