⊗jsrxPmRDPAD 26 of 57 menu

Príprava dát pre objekt action v Reduxe

Nedávno sme hovorili o tom, že funkcia createSlice očakáva jeden argument pri vytváraní action.payload. Na jednej strane to zjednodušuje jej používanie, na druhej strane to môže vyžadovať dodatočné kroky na prípravu obsahu objektu action.

Otvorme našu aplikáciu s produktami a v nej súbor NewProductForm.jsx. Všimnite si nasledujúci riadok kódu:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Tu zhromažďujeme payload objekt priamo v React komponente a prenášame ho do akcie productAdded. A čo ak budeme musieť odoslať takúto akciu z niekoľkých komponentov alebo logika na zostavenie bude zložitá? V zásade by nášmu komponentu malo byť jedno, ako vyzerá objekt v payload pre danú akciu. Navyše nám nevyhovuje neustále duplikovanie kódu.

Tieto problémy nám opäť môže pomôcť vyriešiť náš slávny createSlice, pretože pri písaní redukčnej funkcie umožňuje použiť callback funkciu prepare, v ktorej môžeme písať rôznu logiku, generovať náhodné čísla a podobne. V takom prípade môže byť hodnota pre pole redukčnej funkcie reprezentovaná nasledujúcim objektom:

{reducer, prepare}

Otvorme náš súbor productsSlice.js a zmeňme kód pre redukčnú funkciu productAdded. Teraz tento kúsok kódu:

productAdded(state, action) { state.push(action.payload) },

Zmeníme na nasledujúci, v ktorom funkcia reducer bude vykonávať aktualizáciu stavu v store, a prepare - bude vracať objekt payload so vygenerovaným id a našimi ďalšími dátami:

productAdded: { reducer(state, action) { state.push(action.payload) }, prepare(name, desc, price, amount) { return { payload: { id: nanoid(), name, desc, price, amount, }, } }, },

Keďže teraz budeme generovať id tu, a nie v komponente, pridajme nanoid do importu:

import { createSlice, nanoid } from '@reduxjs/toolkit'

Nakoniec vykonajme zmeny v NewProductForm.jsx. Namiesto riadku:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Budeme mať taký, v ktorom jednoducho cez čiarku prenesieme potrebné dáta (nezabudnite v tomto súbore odstrániť nanoid z importu):

dispatch(productAdded(name, desc, price, amount))

Spustíme aplikáciu, potom vytvoríme nový produkt a presvedčíme sa, že sme nič nepokazili.

Otvorte vašu aplikáciu so študentmi. V súbore StudentsSlice.js prepíšte vašu redukčnú funkciu studentAdded takým spôsobom, aby bola vo forme objektu {reducer, prepare}, ako je ukázané v lekcii.

Vykonajte zodpovedajúce zmeny v súbore NewStudentForm.jsx, ako je ukázané v lekcii. Spustite aplikáciu a presvedčte sa, že všetko funguje ako predtým.

Slovenčina
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používame cookies na fungovanie stránky, analýzu a personalizáciu. Spracúvanie údajov prebieha v súlade s Politikou ochrany osobných údajov.
prijať všetky nastaviť odmietnuť