⊗jsrxPmRDEF 24 of 57 menu

Formular zur Datenbearbeitung in Redux

Jetzt haben wir einen Reducer, um Daten im Store zu ändern. In dieser Lektion erstellen wir ein Formular, mit dem wir Produktdaten bearbeiten können.

Lassen Sie uns unsere Produktanwendung öffnen und in dem Ordner products die Datei EditProductForm.jsx erstellen. Die Erstellung der Komponente EditProductForm wird analog zu NewProductForm sein, mit Ausnahme einiger Unterschiede, auf die wir näher eingehen werden. Deshalb kopieren Sie den vollständigen Code von NewProductForm.jsx und fügen Sie ihn in die erstellte Datei EditProductForm.jsx ein. Jetzt fangen wir der Reihe nach an.

Entfernen Sie den Import von nanoid, hier brauchen wir keine id zu generieren. Ersetzen Sie den Import von productAdded durch productUpdated, denn hier werden wir die Action für die Aktualisierung verwenden, nicht für das Hinzufügen eines Produkts.

Als nächstes ändern wir den Namen unserer Komponentenfunktion von NewProductForm auf EditProductForm.

Bevor wir lokale States in der Funktion EditProductForm für name, desc, price und amount anlegen, lassen Sie uns noch ein paar Codezeilen einfügen. Wie wir bereits erwähnt haben, brauchen wir hier keine id zu generieren. Jetzt ist unsere Aufgabe, sie aus den Daten des zu ändernden Produkts zu erhalten. Das haben wir bereits getan, als wir die eigene Seite für ein Produkt erstellt haben. Also, holen wir uns die id mit dem Hook useParams, und finden dann das gewünschte Produkt mit dem Hook useSelector (vergessen Sie nicht, beide Hooks am Anfang der Datei zu importieren):

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

Danach ändern wir den Block mit der Deklaration der lokalen States. Jetzt müssen wir als Anfangswert die aus dem Store erhaltenen Produktdaten setzen. So wird der erste State aussehen, ändern Sie die drei verbleibenden bitte selbst:

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

Nach der Zuweisung der Variable für useDispatch lassen Sie uns noch eine Codezeile diesmal für den Hook useNavigate einfügen. Wir werden ihn verwenden, um zur Produktseite zurückzukehren, wenn der Benutzer die im Formular vorgenommenen Änderungen speichert:

const navigate = useNavigate()

Importieren Sie diesen Hook auch am Anfang der Datei:

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

Als nächstes folgen die Handler für die Eingabefelder. Und danach müssen wir die Funktion onSaveProductClick anpassen. Jetzt werden wir darin beim Klick die Action productUpdated mit der erhaltenen id und den geänderten Daten als Objekt versenden. Danach fügen wir unser navigate hinzu, um zur Seite des geänderten Produkts zu wechseln:

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

Es bleibt nur noch, in unserem zurückgegebenen Markup die Zeile zu finden:

<h2>Add a New Product</h2>

Und sie zu ersetzen durch:

<h2>Edit Product</h2>

Öffnen Sie Ihre Studentenanwendung. Erstellen Sie eine Datei EditStudentForm.jsx nach Analogie zu NewStudentForm.jsx. Nehmen Sie die Änderungen vor, wie in der Lektion gezeigt.

Deutsch
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskΕλληνικά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
Wir verwenden Cookies für den Betrieb der Website, Analyse und Personalisierung. Die Datenverarbeitung erfolgt gemäß der Datenschutzerklärung.
alle akzeptieren anpassen ablehnen