⊗jsrxPmRDEF 24 of 57 menu

Formulář pro úpravu dat v Redux

Nyní máme reduktor pro změnu dat v store. V této lekci vytvoříme formulář, pomocí kterého budeme moci upravovat data produktu.

Otevřeme naši aplikaci s produkty a vytvořme ve složce products soubor EditProductForm.jsx. Vytvoření komponentu EditProductForm bude analogické k NewProductForm, s výjimkou některých rozdílů, na kterých se budeme zastavovat. Proto zkopírujte celý kód NewProductForm.jsx a vložte jej do vytvořeného souboru EditProductForm.jsx. Nyní začneme popořadě.

Odstraňte z importu nanoid, zde nám není potřeba generovat id. Nahraďte import productAdded na productUpdated, protože zde budeme používat akci pro aktualizaci, a ne pro přidání produktu.

Dále změníme název funkce našeho komponentu z NewProductForm na EditProductForm.

Než zavedeme lokální stavy ve funkci EditProductForm pro name, desc, price a amount, vložme ještě několik řádků kódu. Jak jsme již zmínili dříve, zde nám není potřeba generovat id. Nyní naším úkolem je získat jej z dat upravovaného produktu. Už jsme to dělali při vytváření samostatné stránky pro produkt. Takže, získáme id pomocí hooku useParams, a pak najdeme potřebný produkt, pomocí hooku useSelector (nezapomeňte importovat oba hooky na začátku souboru):

let params = useParams() const { productId } = params const product = useSelector((state) => state.products.find((product) => product.id === productId) )

Poté změníme blok s deklarací lokálních stavů. Nyní potřebujeme jako počáteční hodnotu nastavit získaná data produktu ze store. Takto bude vypadat první stav, tři zbývající upravte sami:

const [name, setName] = useState(product.name)

Po přiřazení proměnné pro useDispatch vložme ještě jeden řádek kódu tentokrát pro hook useNavigate. Budeme jej používat pro návrat na stránku s produktem, když uživatel uloží provedené změny ve formuláři:

const navigate = useNavigate()

Taky importujte tento hook na začátku souboru:

import { useNavigate, useParams } from 'react-router-dom'

Dále máme obsluhy pro vstupní pole. A po nich je nutné upravit funkci onSaveProductClick. Nyní v ní při kliknutí budeme odesílat akci productUpdated se získaným id a změněnými daty ve formě objektu. Poté přidáme náš navigate, pro přechod na stránku upraveného produktu:

const onSaveProductClick = () => { if (name && desc && price && amount) { dispatch( productUpdated({ id: productId, name, desc, price, amount, }) ); navigate(`/products/${productId}`); } }

Zbývá pouze v naší vracené versti najít řádek:

<h2>Add a New Product</h2>

A nahradit jej na:

<h2>Edit Product</h2>

Otevřete vaši aplikaci se studenty. Vytvořte soubor EditStudentForm.jsx analogicky k NewStudentForm.jsx. Proveďte v něm změny, jak je ukázáno v lekci.

Čeština
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Používáme soubory cookie pro fungování webu, analýzu a personalizaci. Zpracování údajů probíhá v souladu s Zásadami ochrany osobních údajů.
přijmout vše přizpůsobit odmítnout