⊗jsrxPmRDEP 23 of 57 menu

Změna dat produktu v Redux store

Naučili jsme se přidávat produkty, ale co když budeme chtít změnit informace o produktu? Podívejme se, jak to udělat v této a následujících lekcích.

Otevřeme naši aplikaci s produkty a přejděme do souboru productsSlice.js. Začněme tím, že pro slice products potřebujeme napsat další reducer, který se spustí při aktualizaci produktu. Pojmenujeme jej productUpdated a přidáme do pole reducers za reducer productAdded. Také mu předáme jako parametry state a action, na jejichž základě, jak si pamatujeme, reducer funguje:

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

Nyní se zamysleme, jaká data budeme potřebovat pro aktualizaci produktu. Především - to je id, podle něj budeme moci najít požadovaný produkt v store. Zbývající data - název, popis, cena a množství budou určena ke změně. Všechny tyto hodnoty získáme z vlastnosti payload objektu action, který k nám přijde, a pokud bychom jej psali ručně, vypadal by tak, jak je znázorněno níže. Všimněte si, že očekávaná hodnota vlastnosti payload - jeden argument, proto budeme sem předávat objekt (o tom si povíme dále):

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

Poté, co jsme objasnili hlavní body, nyní můžeme napsat do složených závorek kód pro productUpdated. Nejprve získáme z objektu action změněná data:

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

Nyní najdeme podle získaného id produkt, který je třeba změnit:

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

Pokud byl takový produkt v store nalezen, nahradíme jeho data novými hodnotami:

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 } },

Zbývá nám pouze exportovat action creator pro použití v komponentě, který za nás laskavě vytvoří createSlice. Přidejme jej k exportu na konci souboru, spolu se stávajícím productAdded:

export const { productAdded, productUpdated } = productsSlice.actions

Otevřete vaši aplikaci se studenty. Po prostudování materiálu lekce v souboru studentsSlice.js doplňte další reducer pro productsSlice, který bude aktualizovat data studenta v store v případě jejich změny uživatelem. Pojmenujte jej studentUpdated.

A jak by v tomto případě vypadal váš objekt action? Pošlete jeho kód v odpovědi.

Na konci souboru exportujte získaný action creator studentUpdated.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικά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
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout