⊗jsrxPmRDEP 23 of 57 menu

Modyfikacja danych produktu w Redux store

Nauczyliśmy się dodawać produkty, a co jeśli będziemy chcieli zmienić informację o produkcie? Przyjrzyjmy się, jak to zrobić na tej i kolejnych lekcjach.

Otwórzmy naszą aplikację z produktami i przejdźmy do pliku productsSlice.js. Zacznijmy od tego, że dla slice'a products musimy napisać kolejny reducer, który będzie uruchamiany przy aktualizacji produktu. Nazwijmy go productUpdated i dodajmy w polu reducers po reducerze productAdded. Również przekażmy mu od razu parametrami state i action, na podstawie których, jak pamiętamy, działa reducer:

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

Teraz pomyślmy, jakie dane będą nam potrzebne do aktualizacji produktu. Przede wszystkim - to id, po nim będziemy mogli znaleźć interesujący nas produkt w store. Pozostałe dane - nazwa, opis, cena i ilość będą dla nas do zmiany. Wszystkie te wartości otrzymamy z właściwości payload obiektu action, który do nas przyjdzie, i gdybyśmy pisali go ręcznie, to wyglądałby on tak, jak pokazano poniżej. Zauważ, że oczekiwana wartość właściwości payload - to jeden argument, więc będziemy przekazywać tutaj obiekt (o tym porozmawiamy w dalszej części):

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

Wyjaśniwszy główne kwestie, teraz możemy napisać w nawiasach klamrowych kod dla productUpdated. Najpierw pobierzmy z obiektu action zmienione dane:

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

Teraz znajdziemy po otrzymanym id produkt, który trzeba zmienić:

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

Jeśli taki produkt został znaleziony w store, to zamienimy jego dane na nowe wartości:

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

Pozostaje nam tylko wyeksportować action creator do użycia w komponencie, który uprzejmie stworzy za nas createSlice. Dodajmy go do eksportu na końcu pliku, obok istniejącego productAdded:

export const { productAdded, productUpdated } = productsSlice.actions

Otwórz twoją aplikację ze studentami. Po zapoznaniu się z materiałem lekcji, w pliku studentsSlice.js dopisz kolejny reducer dla productsSlice, który będzie aktualizował dane studenta w store w przypadku ich zmiany przez użytkownika. Nazwij go studentUpdated.

A jak w tym przypadku wyglądałby twój obiekt action? Prześlij jego kod w odpowiedzi.

Na końcu pliku wyeksportuj otrzymany action creator studentUpdated.

Polski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Wykorzystujemy pliki cookie do działania strony, analizy i personalizacji. Przetwarzanie danych odbywa się zgodnie z Polityką prywatności.
zaakceptuj wszystkie dostosuj odrzuć