L’annullamento e il ripristino rappresentano un’operazione molto comune nelle applicazioni dinamiche. Con Redux, è possibile implementare queste funzionalità in modo molto efficiente attraverso la gestione dello stato dell’applicazione.
Per capire come funziona, è utile sapere che Redux gestisce lo stato dell’applicazione come un albero di stati immutabili. Ogni volta che si verifica un’azione (come un click di un utente o l’arrivo di dati dal server), viene creato un nuovo stato, basato sul vecchio stato e sull’azione.
Per registrare un elenco di stati, possiamo modificare il reducer in modo che invece di restituire un singolo nuovo stato, restituisce un elenco di stati. Da qui, l’annullamento e il ripristino possono essere implementati come semplici spostamenti avanti e indietro in questo elenco.
Ad esempio, l’annullamento potrebbe essere implementato come una semplice azione di Redux che sposta l’indice corrente dell’elenco di stati indietro di una posizione. Allo stesso modo, il ripristino potrebbe essere implementato come un’azione che sposta l’indice corrente in avanti di una posizione.
Oltre a ciò, Redux supporta anche l’uso di middleware per attivare azioni in base ad altre azioni. Ad esempio, è possibile utilizzare un middleware per registrare ogni stato che passa attraverso il reducer e quindi utilizzare queste informazioni per implementare l’annullamento e il ripristino.
Un esempio di una libreria che aiuta a farlo è `redux-undo`, che fornisce una funzione di ordine superiore del reducer che aggiunge automaticamente la funzionalità di annullamento e ripristino al tuo reducer.