Elementi fondamentali di NgRx: Store, Azioni, Riduttori, Selettori, Effetti
Lo store è l’elemento chiave dell’intero processo di gestione dello stato. Tiene lo stato e facilita l’interazione tra i componenti e lo stato. È possibile ottenere un riferimento al negozio tramite l’iniezione di dipendenza di Angular, come mostrato di seguito.
constructor(private store: Store<AppState>) {}
Questo riferimento allo store può essere successivamente utilizzato per due operazioni principali:
Per inviare azioni al negozio tramite il metodo store.dispatch(…), che a sua volta attiverà riduttori ed effetti
Per recuperare lo stato dell’applicazione tramite i selettori
Struttura di un albero di oggetti di stato
Supponiamo che la vostra applicazione consista di due moduli funzionali chiamati Utente e Prodotto. Ognuno di questi moduli gestisce parti diverse dello stato complessivo. Le informazioni sul prodotto saranno sempre mantenute nella sezione products dello stato. Le informazioni sull’utente saranno sempre mantenute nella sezione user dello stato. Queste sezioni sono anche chiamate slices.
Azioni
Un’azione è un’istruzione che viene inviata al negozio, opzionalmente con alcuni metadati (payload). In base al tipo di azione, il negozio decide quali operazioni eseguire. Nel codice, un’azione è rappresentata da un semplice oggetto JavaScript con due attributi principali, cioè type e payload. payload è un attributo opzionale che sarà usato dai riduttori per modificare lo stato. Il seguente frammento di codice e la figura illustrano questo concetto.
{ "type": "Login Action", "payload": { userProfile: user }}
NgRx versione 8 fornisce una funzione di utilità chiamata createAction per definire creatori di azioni (non azioni, ma creatori di azioni). Segue un esempio di codice per questo.
Si può quindi utilizzare il creatore di azioni login (che è una funzione) per costruire azioni e spedirle al negozio come mostrato di seguito. user è l’oggetto payload che si passa nell’azione.
this.store.dispatch(login({user}));
Riduttori
I riduttori sono responsabili della modifica dello stato e della restituzione di un nuovo oggetto stato con le modifiche. I riduttori prendono due parametri, lo stato corrente e l’azione. In base al tipo di azione ricevuta, i riduttori eseguiranno alcune modifiche allo stato corrente e produrranno un nuovo stato. Questo concetto è mostrato nel diagramma qui sotto.