⊗jsrxPmWFDA 18 of 57 menu

Sending action and useDispatch hook in Redux

Vi har implementert nesten alle komponenter for å få Redux-applikasjonen til å fungere. Det som gjenstår er å finne ut av hvordan man sender en action fra en React-komponent. La oss komme i gang.

Åpne produktapplikasjonen vår. I skjemaet til komponenten NewProductForm har vi en knapp for å lagre dataene til det nye produktet. La oss legge til en klikk-håndterer på den. La klikk-håndtereren onSaveProductClick utløses når vi klikker på den:

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

For å opprette et nytt produkt trenger vi en ny id for det. Vi vil generere den ved hjelp av den velkjente biblioteken nanoid. Forresten, den trenger du ikke å installere, siden den allerede følger med RTK-pakken. La oss legge til nanoid i importen:

import { nanoid } from '@reduxjs/toolkit'

Vi husker også at den eneste måten å endre state på er å kalle metoden dispatch, som finnes på store, og sende med et action-objekt. For å få tilgang til denne metoden, vil vi bruke React-Redux-hooken useDispatch. La oss importere den også:

import { useDispatch } from 'react-redux'

I koden til funksjonen NewProductForm oppretter vi en konstant dispatch for den rett etter at vi har opprettet konstanter for våre lokale states:

const dispatch = useDispatch()

Vi må også importere action creator-en productAdded, som vi fikk i forrige leksjon:

import { productAdded } from './productsSlice'

Nå kan vi skrive selve funksjonen for håndtereren onSaveProductClick. La oss gjøre dette før return-kommandoen:

const onSaveProductClick = () => {}

Inne i funksjonen kaller vi dispatch, danner action-objektet, hvor i egenskapen payload vil vi putte den genererte id-en, navn, beskrivelse, pris og antall produkt. Alle disse dataene henter vi fra de lokale state-ene. Samtidig sjekker vi i starten med en betingelse om alle feltene er fylt ut - bare i så fall kaller vi dispatch. På slutten av funksjonskoden returnerer vi de lokale state-ene til deres opprinnelige tilstand:

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

La oss nå starte applikasjonen vår, skrive inn data i skjemafeltene og trykke på lagre-knappen. Hurra, et nytt produkt dukket opp nederst på siden. Ved å åpne Redux DevTools, og der fanen Inspector, ser vi at til venstre, i tillegg til @@INIT, er action-en vår products/productAdded også dukket opp. Og i høyre del kan vi klikke på fanene Action og State, og veksle mellom @@INIT og products/productAdded. Nå ser vi at det nye produktet vårt blir lagt til. Også på Action-fanen ser vi action-en, som ble generert automatisk ved hjelp av createSlice (klikk for eksempel på Raw). Hurra: vi trengte ikke å skrive den manuelt.

Åpne studentapplikasjonen din, og deretter filen NewStudentForm.jsx, legg en klikk-håndterer på lagre-knappen.

Skriv alle nødvendige imports og skriv funksjonen onSaveStudentClick som håndterer klikk, ved å bruke metoden dispatch som vist i leksjonen.

Start applikasjonen, skriv inn data i skjemafeltene og trykk på lagre-knappen. Forsikre deg om at en ny student har blitt lagt til nederst på siden.

Åpne Redux DevTools og gå gjennom Action- og State-fanene, forsikre deg om at det nye studentobjektet blir lagt til. Se på action-objektet som ble generert for deg, og send det som svar på denne oppgaven.

Norsk
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Vi bruker informasjonskapsler for nettstedets funksjonalitet, analyse og personalisering. Behandling av data foregår i henhold til Personvernerklæringen.
godta alle tilpass avvis