Redux es una biblioteca de JavaScript que se utiliza para administrar el estado de la aplicación. Proporciona una forma predecible de gestionar y actualizar el estado de la aplicación utilizando el patrón de diseño de arquitectura Flux, que a su vez toma algunas ideas del patrón de diseño Command.
Deshacer y rehacer son funciones de tiempo de viaje proporcionadas por Redux. Esto es posible debido a la forma en que Redux gestiona el estado de la aplicación.
En Redux, todo cambio de estado es impulsado por una acción. Una acción es simplemente un objeto con un tipo de propiedad y algunas otras propiedades que contienen información adicional sobre la acción.
Los reductores son funciones puras que toman el estado actual y una acción, y devuelven un nuevo estado. Nunca modifican el estado actual, solo devuelven un nuevo estado que representa los cambios especificados por la acción.
Deshacer se implementa simplemente recordando los estados anteriores. Por lo tanto, para deshacer, Redux simplemente vuelve al estado anterior.
Rehacer es un poco más complejo. Redux necesita recordar las acciones que se han deshecho para que puedan volverse a aplicar. Esto significa que Redux necesita almacenar un historial de estados y un historial de acciones.
Para rehacer, Redux aplica nuevamente las acciones que se deshicieron, a partir del estado en el que se encontraba cuando se deshicieron las acciones.
Es importante tener en cuenta que esto no es algo que Redux haga automáticamente. Deshacer y rehacer son características que puedes implementar utilizando las herramientas que proporciona Redux. Sin embargo, hay bibliotecas adicionales disponibles, como Redux-Undo, que proporcionan esta funcionalidad directamente.
En resumen, deshacer y rehacer funcionan en Redux mediante el seguimiento de los estados anteriores y las acciones aplicadas, lo que permite retroceder o avanzar a través de estos estados según sea necesario.