⊗jsrxPmWFDA 18 of 57 menu

Odosielanie action a hook useDispatch v Reduxe

Implementovali sme takmer všetky zložky pre fungovanie Redux aplikácie. Zostáva len pochopiť odosielanie action z React komponentu. Poďme na to.

Otvorte našu aplikáciu s produktmi. V forme komponentu NewProductForm máme tlačidlo na uloženie údajov nového produktu. Nastavme mu obslužnú rutinu kliku. Nech pri kliknutí naň spustí obslužnú rutinu onSaveProductClick:

<button type="button" onClick={onSaveProductClick}> save </button>

Pri vytváraní nového produktu budeme potrebovať preň nové id. Vygenerujeme ho pomocou dobre známej knižnice nanoid. Mimochodom, nie je potrebné ju inštalovať, pretože je už súčasťou balíka RTK. Pridajme nanoid do importu:

import { nanoid } from '@reduxjs/toolkit'

Tiež pamätáme, že jediný spôsob ako zmeniť state - je zavolať metódu dispatch, ktorú má store a odovzdať objekt action. Aby sme sa dostali k tejto metóde, použijeme React-Redux hook useDispatch. Importujme ho:

import { useDispatch } from 'react-redux'

V kóde funkcie NewProductForm vytvorme preň konštantu dispatch hneď po tom, ako sme vytvorili konštanty pre naše lokálne stavy:

const dispatch = useDispatch()

Tiež musíme importovať action creator productAdded, ktorý sme získali v predchádzajúcej lekcii:

import { productAdded } from './productsSlice'

Teraz môžeme napísať samotnú funkciu obslužnej rutiny onSaveProductClick. Urobme to pred príkazom return:

const onSaveProductClick = () => {}

Vo vnútri funkcie voláme dispatch, tvoríme objekt action, do vlastnosti payload ktorého sa dostane vygenerované id, názov, popis, cena a množstvo produktu. Všetky tieto údaje berieme z lokálnych stavov. Pritom na začiatku kontrolujeme v podmienke, či sú všetky polia vyplnené - len v tomto prípade voláme dispatch. Na konci kódu funkcie vrátime lokálne stavy do pôvodného stavu:

const onSaveProductClick = () => { if (name && desc && price && amount) { dispatch( productAdded({ id: nanoid(), name, desc, price, amount }) ) setName('') setDesc('') setPrice(0) setAmount(0) } }

Teraz spustíme našu aplikáciu, zadáme údaje do polí formulára a stlačíme tlačidlo uloženia. Hurá, dole na stránke sa objavil nový produkt. Otvorením Redux DevTools, a v nich karty Inspector, vidíme, že vľavo okrem @@INIT pribudla aj naša action products/productAdded. A v pravej časti môžeme kliknúť na karty Action a State, pričom prepínať medzi @@INIT a products/productAdded. Teraz vidíme, že sa náš nový produkt pridáva. Tiež na karte Action vidíme action, vygenerovaný automaticky pomocou createSlice (kliknite napríklad na Raw). Hurá: nemuseli sme ho zapisovať ručne.

Otvorte vašu aplikáciu so študentmi, a potom súbor NewStudentForm.jsx, nastavte na tlačidlo uloženia obslužnú rutinu kliku.

Napíšte všetky potrebné importy a napíšte funkciu-obslužnú rutinu onSaveStudentClick, aplikujte metódu dispatch ako je ukázané v lekcii.

Spustite aplikáciu, zadajte do polí formulára údaje a stlačte tlačidlo uloženia. Presvedčte sa, že na stránke dole pribudol nový študent.

Otvorte Redux DevTools a prejdite kartami Action a State, presvedčte sa, že nový objekt so študentom sa pridáva. Pozrite sa na objekt action, ktorý sa vám vygeneroval, pošlite ho v odpovedi na túto úlohu.

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ť