⊗jsrxPmRDEP 23 of 57 menu

Змяненне дадзеных прадукту ў Redux store

Мы навучыліся дадаваць прадукты, а што калі мы захочам змяніць інфармацыю пра прадукт? Давайце разгледзім як гэта зрабіць у гэтым і наступных уроках.

Адчынём наша прыкладанне з прадуктамі і зайдзем у файл productsSlice.js. Пачнем з таго, што нам трэба для слайса products напісаць яшчэ адзін reducer, які будзе запускацца пры абнаўленні прадукту. Назвем яго productUpdated і дадамо ў поле reducers пасля рэдьюсера productAdded. Таксама перададзім яму адразу параметрамі state і action, на аснове якіх, як мы помнім, працуе рэдьюсер:

reducers: { productAdded(state, action) { state.push(action.payload) }, productUpdated(state, action) {}, },

Цяпер давайце падумаем, якія дадзеныя нам спатрэбяцца для абнаўлення прадукту. Перш за ўсё - гэта id, па ім мы зможам знайсці які цікавіць нас прадукт у store. Астатнія дадзеныя - назва, апісанне, цана і колькасць будуць у нас для змянення. Усе гэтыя значэнні мы атрымаем з уласцівасці payload аб'екта action, які нам прыйдзе, і, калі б мы пісалі яго рукамі, то ён бы выглядаў так, як паказана ніжэй. Заўважце, што чаканае значэнне ўласцівасці payload - адзін аргумент, таму мы будзем перадаваць сюды аб'ект (пра гэта мы пагаворым у далейшым):

{ type: 'products/productUpdated', payload: {id, name, desc, price, amount} }

Высветліўшы асноўныя моманты, цяпер мы можам напісаць у фігурных дужках код для productUpdated. Спачатку атрымаем з аб'екта action змененыя дадзеныя:

productUpdated(state, action) { const { id, name, desc, price, amount } = action.payload },

Цяпер мы знойдзем па атрыманым id прадукт, які трэба змяніць:

productUpdated(state, action) { const { id, name, desc, price, amount } = action.payload const desiredProduct = state.find(product => product.id === id) },

Калі такі прадукт знайшоўся ў store, то мы заменім яго дадзеныя новымі значэннямі:

productUpdated(state, action) { const { id, name, desc, price, amount } = action.payload const desiredProduct = state.find(product => product.id === id) if (desiredProduct) { desiredProduct.name = name desiredProduct.desc = desc desiredProduct.price = price desiredProduct.amount = amount } },

Нам застаецца толькі экспартаваць action creator для выкарыстання ў кампаненце, які ласкава стварыць за нас createSlice. Давайце дадамо яго да экспарту ў канцы файла, побач з існуючым productAdded:

export const { productAdded, productUpdated } = productsSlice.actions

Адчынiце ваша прыкладанне са студэнтамі. Вывучыўшы матэрыял урока, у файле studentsSlice.js дапішыце яшчэ адзін reducer для productsSlice, які будзе абнаўляць дадзеныя студэнта ў store у выпадку іх змянення карыстальнікам. Назвіце яго studentUpdated.

А як бы выглядаў у гэтым выпадку ваш аб'ект action? Даслеце яго код у адказе.

У канцы файла экспартуйце атрыманы action creator studentUpdated.

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