⊗jsrxPmWFDA 18 of 57 menu

Slanje action-a i useDispatch hook u Redux-u

Implementirali smo praktično sve komponente za rad Redux aplikacije. Ostalo je samo da shvatimo kako da pošaljemo action iz React komponente. Počnimo.

Otvorite našu aplikaciju sa proizvodima. U formi komponente NewProductForm kod nas postoji dugme za čuvanje podataka novog proizvoda. Hajde da mu dodelimo handler klika. Neka po kliku na njega bude pozvan handler onSaveProductClick:

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

Prilikom kreiranja novog proizvoda trebaće nam za njega novi id. Generisaćemo ga pomoću poznate biblioteke nanoid. Inače, ne treba je instalirati, pošto ona već dolazi sa RTK paketom. Dodajmo nanoid u import:

import { nanoid } from '@reduxjs/toolkit'

Takođe, sećamo se da jedini način da promenimo state - je da pozovemo metod dispatch, koji postoji kod store-a i prosledimo objekat action. Da bismo došli do tog metoda, mi ćemo primeniti React-Redux hook useDispatch. Hajde da ga importujemo:

import { useDispatch } from 'react-redux'

U kodu funkcije NewProductForm definisaćemo za njega konstantu dispatch odmah nakon što smo definisali konstante za naše lokalne state-ove:

const dispatch = useDispatch()

Takođe nam je neophodno da importujemo action creator productAdded, koji smo dobili na prethodnoj lekciji:

import { productAdded } from './productsSlice'

Sada možemo da napišemo samu funkciju handler-a onSaveProductClick. Uradimo to pre komande return:

const onSaveProductClick = () => {}

Unutar funkcije pozivamo dispatch, formiramo objekat action, u svojstvo payload koga će ući generisani id, naziv, opis, cena i količina proizvoda. Sve ove podatke uzimamo iz lokalnih state-ova. Pored toga, na početku proveravamo u uslovu da li su sva polja popunjena - samo u tom slučaju pozivamo dispatch. Na kraju koda funkcije vraćamo lokalne state-ove u početno stanje:

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

Sada ćemo pokrenuti našu aplikaciju, uneti podatke u polja forme i kliknuti na dugme čuvanja. Ura, ispod na stranici pojavio se novi proizvod. Otvorivši Redux DevTools, a u njima karticu Inspector, vidimo da se levo pored @@INIT pojavio i naš action products/productAdded. A u desnom delu možemo da klikćemo po karticama Action i State, prebacujući pritom @@INIT i products/productAdded. Sada vidimo da se naš novi proizvod dodaje. Takođe na kartici Action vidimo action, generisan automatski pomoću createSlice (kliknite, na primer, na Raw). Ura: nije bilo potrebno da ga pišemo ručno.

Otvorite vašu aplikaciju sa studentima, a zatim fajl NewStudentForm.jsx, dodelite dugmetu čuvanja handler klika.

Napišite sve potrebne import-e i napišite funkciju-handler onSaveStudentClick, primenjujući metod dispatch kao što je pokazano u lekciji.

Pokrenite aplikaciju, unesite u polja forme podatke i kliknite na dugme čuvanja. Uverite se da se na stranici ispod dodao novi student.

Otvorite Redux DevTools i prođite kroz karice Action i State, uverite se da se novi objekat sa studentom dodaje. Pogledajte objekat action, koji vam je generisan, pošaljite ga u odgovoru na ovaj zadatak.

Srpski
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Koristimo kolačiće za rad sajta, analitiku i personalizaciju. Obrada podataka se vrši u skladu sa Politikom privatnosti.
prihvati sve podesi odbij