⊗jsrxPmSDSO 36 of 57 menu

Ottenere i Selettori in Redux

A volte è molto utile eliminare il codice superfluo nell'applicazione, nonché incapsulare i dati.

Apriamo la nostra applicazione con i prodotti. Si noti che in diversi punti dell'applicazione, utilizzando i selettori, estraiamo lo slice dei prodotti per compiere alcune azioni su di esso.

E ora apriamo il nostro productsSlice.js, scendiamo alla fine del file e aggiungiamo un paio di righe di codice, in cui scriveremo due selettori e li esporteremo. Una funzione sarà per ottenere tutti i prodotti:

export const selectAllProducts = (state) => state.products.products

E dopo di essa la seconda - per ottenere un prodotto per id:

export const selectProductById = (state, productId) => state.products.products.find((product) => product.id === productId)

Certo, potrebbe sorgere una domanda legittima: da dove viene questa complessità: state.products.products? La risposta è semplice, nell'ultima lezione abbiamo cambiato la struttura dello slice e ora i nostri prodotti si troveranno come array in una proprietà separata products dello slice dei prodotti state.products (ricorda che qui state è l'oggetto root dello stato Redux, che contiene tutti gli slice).

In questo modo, abbiamo semplicemente spostato il codice per le funzioni selettore in un unico luogo nell'applicazione e ora dobbiamo apportare le modifiche corrispondenti lì, dove le abbiamo utilizzate. Iniziamo con il file ProductsList.jsx. Importiamo in esso selectAllProducts, poiché qui dovremo ottenere tutti i prodotti:

import { selectAllProducts } from './productsSlice'

E all'inizio del codice della funzione ProductsList, sostituiamo:

const products = useSelector((state) => state.products)

Con la riga:

const products = useSelector(selectAllProducts)

E ora passiamo al file ProductPage.jsx. Qui ci serviva un prodotto per id. Sostituiamo la riga (non dimenticare l'import):

const product = useSelector((state) => state.products.find((product) => product.id === productId) )

Con:

const product = useSelector((state) => selectProductById(state, productId))

Esegui tu stesso una sostituzione simile nel file EditProductForm.jsx. Qui ci serve anche un prodotto per id.

Ricorda che questa ottimizzazione è solo per tua comodità e puoi farla quando la ritieni necessaria e conveniente. Nel nostro esempio, immagina se avessimo scritto il codice della funzione selettore ogni volta in luoghi diversi, e poi avessimo cambiato la struttura dello stato, e dovessimo quindi correggerlo in tutti i componenti.

Apri la tua applicazione con gli studenti. Al suo interno, apri il file studentsSlice.js. In fondo al file, scrivi ed esporta, come mostrato nella lezione, due selettori per ottenere tutti gli studenti selectAllStudents e per ottenere uno studente per id selectStudentById.

Ora importa selectAllStudents e selectStudentById nei file StudentsList.jsx, StudentPage.jsx e EditStudentForm.jsx, apporta in questi file le modifiche corrispondenti, 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