Redux ilovasiga reducer qo'shish

O'tgan darsda biz har bir mahsulotga foydalanuvchi reaktsiyalari bo'lishi uchun UserReaction komponentini yaratdik. Endi foydalanuvchi qaysidir reaktsiya tugmasini bosganda reaktsiya hisoblagichini boshqaradigan reducerni yozishimiz kerak.

Keling, mahsulotlar ilovamizni ochaylik, undagi productsSlice.js faylini barcha reducerlar bilan. Endi reducers xususiyatida yana bir reducer reactionClicked yaratamiz (uni birinchi o'ringa - productAdded dan oldin qo'yishimiz mumkin, garchi bu ahamiyatsiz). Odatiy kabi, unga state va action parametrlarini uzatamiz:

products/productsSlice.jsreactionClicked(state, action) {},

Endi oldingi qadamda bo'sh qoldirgan jingalak qavslar ichiga uning uchun kod yozamiz. Birinchidan, mahsulot id sini action ob'ektining payload dan va reaktsiya nomini olamiz:

products/productsSlice.jsconst { productId, reaction } = action.payload

Keyin berilgan statedan kerakli mahsulotni olamiz:

products/productsSlice.jsconst currentProduct = state.find(product => product.id === productId)

Va agar bunday mahsulot mavjud bo'lsa, berilgan reaktsiya qiymatini 1 ga oshiramiz:

products/productsSlice.jsif (currentProduct) {
  currentProduct.reactions[reaction]++
}

Hammasi shu, bizning reactionClicked uchun kod tayyor:

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

Keling, fayl oxirida yaratilgan action creatorni eksport qilamiz:

products/productsSlice.jsxexport const {
  reactionClicked,
  productAdded,
  productUpdated
} = productsSlice.actions

Bu yerda ikkita muhim nuqtani ta'kidlash kerak. Siz oldingi darslardan eslaysiz - reducer kodida qiymatni to'g'ridan-to'g'ri shunday yangilash mumkin emas (ushbu qatorga qarang: reactions[reaction]++), lekin biz bunga yo'l qo'yamiz, chunki biz buni createSlice ichida qilmoqdamiz, u esa Immer kutubxonasidan foydalanadi. U bizning kodimizni qiymatni "xavfsiz" yangilashga aylantirish uchun g'amxo'rlik qiladi. Bu bizga murakkab narsalarni oddiyroq usulda yozish imkonini beradi.

Yodda tutish kerak bo'lgan keyingi narsa - action ob'ekti minimal mumkin bo'lgan ma'lumotni o'z ichiga olishi kerak - faqat nima sodir bo'lganligini ko'rsatish uchun. Unda hech qanday hisob-kitob qilish shart emas. State yangilash uchun barcha hisob-kitoblar reducerda amalga oshirilishi kerak, buning uchun qancha mantiq kerak bo'lsa, shuncha yozish mumkin.

Задание 1

Talabalar ilovingizni oching va studentsSlice.js faylida reducers maydoniga darsda ko'rsatilgandek yana bir reducer voteClicked qo'shing. Uning uchun kod yozing. Sizning reducer vazifangiz - bosilgan vote (yoki ovoz) qiymatini ushbu talaba uchun 1 ga oshirish.

Задание 2

Fayl oxirida yaratilgan voteClicked action creatorni eksport qilishni unutmang.