In una tipica app Web, di solito dobbiamo affrontare il problema CARICAMENTO / SUCCESSO / ERRORE, ovvero:
- Quando faccio una richiesta di back-end voglio visualizzare un cursore di caricamento, forse disabilitare alcuni pulsanti.
- Quando la richiesta termina correttamente, voglio visualizzare i dati.
- Quando la richiesta termina con un errore - Voglio visualizzare o gestire l'errore.
Se non stai attento, questo può portare al codice spaghetti - specialmente se stai facendo cose come avere due richieste in esecuzione allo stesso tempo, e gestirlo quando una richiesta termina, non ferma il cursore di caricamento per l'altro elemento, per esempio.
Solo per ridire - Ho trovato questa soluzione che ho trovato funziona abbastanza bene.
Fondamentalmente si definiscono tre azioni:
GET_FOO_REQUEST
GET_FOO_SUCCESS
GET_FOO_FAILURE
e quindi ha un riduttore generico che intercetterà tutte le richieste e imposterà nello stato di redux lo stato di caricamento e di errore, per quel particolare tipo di richiesta (in questo caso GET_FOO
).
È quindi possibile selezionare per lo stato di caricamento o di errore sul componente che ne ha bisogno:
const loadingSelector = createLoadingSelector(['GET_FOO']);
const mapStateToProps = (state) => ({ isFetching: loadingSelector(state) });
La mia domanda è - se sto usando redux-saga - questo modello si applica ancora bene - o la saga di redux già risolve questo problema?