⊗jsrxPmRDEF 24 of 57 menu

Modulo per la modifica dei dati in Redux

Ora abbiamo un reducer per modificare i dati nello store. In questa lezione creeremo un modulo con cui potremo modificare i dati del prodotto.

Apriamo la nostra applicazione di prodotti e creiamo nella cartella products il file EditProductForm.jsx. La creazione del componente EditProductForm sarà analoga a NewProductForm, ad eccezione di alcune differenze, su cui ci soffermeremo. Quindi copiate completamente il codice di NewProductForm.jsx e incollatelo nel file creato EditProductForm.jsx. Ora iniziamo con ordine.

Rimuovete dall'importazione nanoid, qui non ci serve generare l'id. Sostituite l'importazione productAdded con productUpdated, dato che qui useremo l'action per l'aggiornamento, e non per l'aggiunta del prodotto.

Successivamente cambiamo il nome della funzione del nostro componente da NewProductForm a EditProductForm.

Prima di impostare gli stati locali nella funzione EditProductForm per name, desc, price e amount, inseriamo ancora alcune righe di codice. Come accennato in precedenza, qui non abbiamo bisogno di generare l'id. Ora il nostro compito è ottenerlo dai dati del prodotto da modificare. Lo abbiamo già fatto quando abbiamo creato la pagina separata per il prodotto. Quindi, otteniamo l'id usando l'hook useParams, e poi troviamo il prodotto che ci serve, usando l'hook useSelector (non dimenticate di importare entrambi gli hook all'inizio del file):

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

Dopodiché modifichiamo il blocco con la dichiarazione degli stati locali. Ora dobbiamo impostare come valore iniziale i dati del prodotto ottenuti dallo store. Ecco come apparirà il primo stato, modificate voi i restanti tre:

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

Dopo l'assegnazione della variabile per useDispatch aggiungiamo un'altra riga di codice questa volta per l'hook useNavigate. Lo useremo per tornare alla pagina del prodotto quando l'utente salverà le modifiche apportate nel modulo:

const navigate = useNavigate()

Importate anche questo hook all'inizio del file:

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

Successivamente abbiamo i gestori di eventi per i campi di input. E dopo di essi dobbiamo modificare la funzione onSaveProductClick. Ora in essa al click invieremo l'azione productUpdated con l'id ottenuto e i dati modificati sotto forma di oggetto. Poi aggiungeremo la nostra navigate, per passare alla pagina del prodotto modificato:

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

Rimane solo nella nostra veristica restituita trovare la riga:

<h2>Add a New Product</h2>

E sostituirla con:

<h2>Edit Product</h2>

Aprite la vostra applicazione con gli studenti. Create il file EditStudentForm.jsx per analogia con NewStudentForm.jsx. Apportate ad esso le modifiche, come mostrato nella lezione.

Italiano
AfrikaansAzərbaycanБългарскиবাংলাБеларускаяČeštinaDanskDeutschΕλληνικάEnglishEspañolEestiSuomiFrançaisहिन्दीMagyarՀայերենIndonesia日本語ქართულიҚазақ한국어КыргызчаLietuviųLatviešuМакедонскиMelayuမြန်မာNederlandsNorskPolskiPortuguêsRomânăРусскийසිංහලSlovenčinaSlovenščinaShqipСрпскиSrpskiSvenskaKiswahiliТоҷикӣไทยTürkmenTürkçeЎзбекOʻzbekTiếng Việt
Utilizziamo i cookie per il funzionamento del sito, l'analisi e la personalizzazione. I dati vengono elaborati in conformità con la Politica sulla privacy.
accetta tutto personalizza rifiuta