⊗jsrxPmRDEF 24 of 57 menu

Formulaire d'édition de données dans Redux

Nous avons maintenant un réducteur pour modifier les données dans le store. Dans cette leçon, nous créerons un formulaire avec lequel nous pourrons éditer les données d'un produit.

Ouvrons notre application de produits et créons dans le dossier products le fichier EditProductForm.jsx. La création du composant EditProductForm sera analogue à NewProductForm, à l'exception de quelques différences sur lesquelles nous nous attarderons. Par conséquent, copiez entièrement le code de NewProductForm.jsx et collez-le dans le fichier créé EditProductForm.jsx. Maintenant, commençons dans l'ordre.

Retirez de l'importation nanoid, nous n'en avons pas besoin ici pour générer un id. Remplacez l'importation productAdded par productUpdated, car ici nous utiliserons l'action pour la mise à jour, et non pour l'ajout d'un produit.

Ensuite, changeons le nom de notre fonction de composant de NewProductForm en EditProductForm.

Avant de définir les états locaux dans la fonction EditProductForm pour name, desc, price et amount, insérons encore quelques lignes de code. Comme nous l'avons déjà mentionné plus tôt, ici nous n'avons pas besoin de générer un id. Maintenant notre tâche est de l'obtenir à partir des données du produit à modifier. Nous avons déjà fait cela lors de la création d'une page dédiée pour un produit. Donc, récupérons l'id à l'aide du hook useParams, puis trouvons le produit dont nous avons besoin, en utilisant le hook useSelector (n'oubliez pas d'importer les deux hooks au début du fichier) :

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

Après cela, modifions le bloc de déclaration des états locaux. Maintenant nous devons leur assigner comme valeur initiale les données du produit obtenues depuis le store. Voici à quoi ressemblera le premier état, retravaillez les trois restants vous-même :

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

Après l'affectation de la variable pour useDispatch ajoutons encore une ligne de code cette fois pour le hook useNavigate. Nous allons l'utiliser pour retourner à la page du produit lorsque l'utilisateur enregistrera les modifications apportées dans le formulaire :

const navigate = useNavigate()

Importez également ce hook au début du fichier :

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

Ensuite, nous avons les gestionnaires pour les champs de saisie. Et après eux, nous devons corriger la fonction onSaveProductClick. Maintenant, lors d'un clic, nous enverrons l'action productUpdated avec l'id obtenu et les données modifiées sous forme d'objet. Ensuite, nous ajouterons notre navigate, pour naviguer vers la page du produit modifié :

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

Il ne reste plus que dans notre retour JSX à trouver la ligne :

<h2>Add a New Product</h2>

Et la remplacer par :

<h2>Edit Product</h2>

Ouvrez votre application d'étudiants. Créez le fichier EditStudentForm.jsx par analogie avec NewStudentForm.jsx. Apportez-y les modifications, comme montré dans la leçon.

Français
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiहिन्दीMagyarՀայերենIndonesiaItaliano日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Nous utilisons des cookies pour le fonctionnement du site, l'analyse et la personnalisation. Le traitement des données est effectué conformément à la Politique de confidentialité.
accepter tout personnaliser refuser