⊗jsrxPmRDARR 32 of 57 menu

Dodawanie reduktora do aplikacji Redux

W poprzedniej lekcji stworzyliśmy komponent UserReaction, aby każdy produkt miał również reakcje użytkowników. Teraz musimy napisać reduktor, który będzie obsługiwał licznik reakcji po kliknięciu przez użytkownika przycisku danej reakcji.

Otwórzmy naszą aplikację z produktami, a w niej plik productsSlice.js ze wszystkimi reduktorami. Teraz we właściwości reducers stworzymy kolejny reduktor reactionClicked (możemy umieścić go pierwszym - przed productAdded, chociaż to nie ma znaczenia). Jak zwykle, przekażmy mu parametrami state i action:

reactionClicked(state, action) {},

A teraz wewnątrz nawiasów klamrowych, które pozostawiliśmy pustych w poprzednim kroku, napiszmy dla niego kod. Po pierwsze wyodrębnijmy id produktu z payload obiektu action i nazwę reakcji:

const { productId, reaction } = action.payload

Następnie z przekazanego stanu pobierzmy potrzebny produkt:

const currentProduct = state.find(product => product.id === productId)

I jeśli taki produkt istnieje, to zwiększmy wartość przekazanej reakcji o 1:

if (currentProduct) { currentProduct.reactions[reaction]++ }

To wszystko, nasz kod dla reactionClicked jest gotowy:

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

Na końcu pliku dodajmy eksport otrzymanego kreatora akcji:

export const { reactionClicked, productAdded, productUpdated } = productsSlice.actions

Tu należy zaznaczyć dwie ważne kwestie. Jak pamiętasz z poprzednich lekcji - aktualizować w ten sposób bezpośrednio wartość w kodzie reduktora nie wolno (spójrz na tę linię: reactions[reaction]++), ale nam to ujdzie na sucho, ponieważ robimy to wewnątrz createSlice, który używa biblioteki Immer. Ona zadba o to, aby przekształcić nasz kod w "bezpieczną" aktualizację wartości. To pozwala nam pisać skomplikowane rzeczy w prostszy sposób.

Następna rzecz, o której należy pamiętać - obiekt action powinien zawierać minimalną możliwą ilość informacji - tylko tyle, aby wskazać, co się wydarzyło. Nie należy w nim wykonywać żadnych obliczeń. Wszystkie obliczenia dla aktualizacji stanu należy robić w reduktorze, tutaj można w tym celu napisać tyle logiki, ile będzie potrzebne.

Otwórz twoją aplikację ze studentami i w pliku studentsSlice.js dodaj kolejny reduktor voteClicked w polu reducers, jak pokazano w lekcji. Napisz kod dla niego. Zadaniem twojego reduktora - po kliknięciu zwiększać wartość vote (lub głosu), na który kliknięto, dla danego studenta, o 1.

Na końcu pliku nie zapomnij wyeksportować otrzymanego kreatora akcji voteClicked.

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ć