⊗jsrxPmWFDA 18 of 57 menu

Wysyłanie action i hook useDispatch w Redux

Zaimplementowaliśmy praktycznie wszystkie elementy niezbędne do działania aplikacji Redux. Pozostało tylko zapoznać się z wysyłaniem action z komponentu React. Zaczynajmy.

Otwórz naszą aplikację z produktami. W formularzu komponentu NewProductForm mamy przycisk do zapisywania danych nowego produktu. Nałóżmy na niego procedurę obsługi kliknięcia. Niech po kliknięciu na niego uruchamia się procedura obsługi onSaveProductClick:

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

Przy tworzeniu nowego produktu będziemy potrzebować dla niego nowego id. Będziemy je generować za pomocą powszechnie znanej biblioteki nanoid. Nawiasem mówiąc, nie trzeba jej instalować, ponieważ jest już dołączona do pakietu RTK. Dodajmy nanoid do importu:

import { nanoid } from '@reduxjs/toolkit'

Pamiętamy również, że jedyny sposób zmiany state - to wywołać metodę dispatch, którą posiada store i przekazać obiekt action. Aby dotrzeć do tej metody, zastosujemy hook React-Redux useDispatch. Zaimportujmy go:

import { useDispatch } from 'react-redux'

W kodzie funkcji NewProductForm zdefiniujmy dla niego stałą dispatch zaraz po tym, jak zdefiniowaliśmy stałe dla naszych lokalnych stanów:

const dispatch = useDispatch()

Musimy również zaimportować action creator productAdded, który otrzymaliśmy na poprzedniej lekcji:

import { productAdded } from './productsSlice'

Teraz możemy napisać samą funkcję procedury obsługi onSaveProductClick. Zróbmy to przed instrukcją return:

const onSaveProductClick = () => {}

Wewnątrz funkcji wywołujemy dispatch, tworzymy obiekt action, we właściwość payload którego trawi wygenerowane id, nazwa, opis, cena i ilość produktu. Wszystkie te dane pobieramy z lokalnych stanów. Jednocześnie na początku sprawdzamy w warunku czy wszystkie pola są wypełnione - tylko w tym przypadku wywołujemy dispatch. Na końcu kodu funkcji przywracamy lokalne stany do stanu początkowego:

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

Teraz uruchommy naszą aplikację, wprowadźmy dane w pola formularza i naciśnijmy przycisk zapisywania. Hura, na dole strony pojawił się nowy produkt. Otwierając Redux DevTools, a w nim zakładkę Inspector, widzimy, że po lewej stronie oprócz @@INIT pojawił się także nasz action products/productAdded. A w prawej części możemy klikać po zakładkach Action i State, przełączając przy tym @@INIT i products/productAdded. Teraz widzimy, że nasz nowy produkt się dodaje. Również na zakładce Action widzimy action, wygenerowany automatycznie za pomocą createSlice (kliknij, na przykład, po Raw). Hura: nie musieliśmy go przepisywać ręcznie.

Otwórz twoją aplikację ze studentami, a następnie plik NewStudentForm.jsx, nałóż na przycisk zapisywania procedurę obsługi kliknięcia.

Wpisz wszystkie niezbędne importy i napisz funkcję-procedurę obsługi onSaveStudentClick, stosując metodę dispatch jak pokazano na lekcji.

Uruchom aplikację, wprowadź w pola formularza dane i naciśnij na przycisk zapisywania. Upewnij się, że na stronie na dole dodał się nowy student.

Otwórz Redux DevTools i przejrzyj zakładki Action i State, upewnij się, że dodaje się nowy obiekt ze studentem. Spójrz na obiekt action, który u ciebie wygenerował się, prześlij go w odpowiedzi na to zadanie.

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ć