⊗jsrxPmRDPAD 26 of 57 menu

Preparazione dei dati per l'oggetto action in Redux

Recentemente abbiamo parlato del fatto che la funzione createSlice si aspetta un singolo argomento durante la creazione di action.payload. Da un lato questo semplifica il suo utilizzo, dall'altro potrebbe richiedere operazioni aggiuntive per preparare il contenuto dell'oggetto action.

Apriamo la nostra applicazione dei prodotti, e in essa il file NewProductForm.jsx. Prestate attenzione alla seguente riga di codice:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Qui stiamo assemblando l'oggetto payload direttamente nel componente React e lo passiamo all'azione productAdded. E se dovessimo inviare la stessa azione da diversi componenti o la logica per l'assemblaggio risultasse complessa? In teoria, al nostro componente non dovrebbe importare come appare l'oggetto in payload per questa azione. Inoltre, non ci piace la costante duplicazione del codice.

Questi problemi possono essere nuovamente risolti dal nostro famoso createSlice, poiché durante la scrittura del reducer ci permette di utilizzare la funzione callback prepare, in cui possiamo scrivere varie logiche, generare numeri casuali e altro ancora. In questo caso, il valore per il campo del reducer può essere rappresentato come il seguente oggetto:

{reducer, prepare}

Apriamo il nostro file productsSlice.js e modifichiamo il codice per il reducer productAdded. Ora questo frammento di codice:

productAdded(state, action) { state.push(action.payload) },

Lo cambieremo nel seguente, in cui la funzione reducer si occuperà dell'aggiornamento dello state nello store, e prepare - restituirà l'oggetto payload con l'id generato e i nostri altri dati:

productAdded: { reducer(state, action) { state.push(action.payload) }, prepare(name, desc, price, amount) { return { payload: { id: nanoid(), name, desc, price, amount, }, } }, },

Dato che ora genereremo l'id qui, e non nel componente, aggiungiamo nanoid nell'import:

import { createSlice, nanoid } from '@reduxjs/toolkit'

Infine, apportiamo le modifiche in NewProductForm.jsx. Invece della riga:

dispatch(productAdded({ id: nanoid(), name, desc, price, amount }))

Avremo questa, in cui semplicemente passiamo, separati da virgola, i dati necessari (non dimenticate in questo file di rimuovere nanoid dall'import):

dispatch(productAdded(name, desc, price, amount))

Avviamo l'applicazione, creiamo un nuovo prodotto e assicuriamoci di non aver rotto nulla.

Aprite la vostra applicazione con gli studenti. Nel file StudentsSlice.js riscrivete il vostro reducer studentAdded in modo che sia sotto forma di oggetto {reducer, prepare}, come mostrato nella lezione.

Apportate le modifiche corrispondenti nel file NewStudentForm.jsx, come mostrato nella lezione. Avviate l'applicazione e assicuratevi che tutto funzioni come prima.

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