Esta página fue traducida por PageTurner AI (beta). No está respaldada oficialmente por el proyecto. ¿Encontraste un error? Reportar problema →
Motivación
A medida que los requisitos de las aplicaciones JavaScript de una sola página se han vuelto cada vez más complejos, nuestro código debe gestionar más estado que nunca. Este estado puede incluir respuestas del servidor y datos en caché, así como información generada localmente que aún no se ha guardado en el servidor. El estado de la interfaz de usuario también aumenta en complejidad, ya que necesitamos gestionar rutas activas, pestañas seleccionadas, indicadores de carga, controles de paginación y más.
Gestionar este estado en constante cambio es difícil. Si un modelo puede actualizar otro modelo, entonces una vista puede actualizar un modelo, que actualiza otro modelo, y esto a su vez podría hacer que otra vista se actualice. En algún momento, ya no entiendes qué sucede en tu aplicación porque has perdido el control sobre cuándo, por qué y cómo cambia su estado. Cuando un sistema es opaco y no determinista, es difícil reproducir errores o añadir nuevas funcionalidades.
Como si esto no fuera ya suficientemente problemático, considera los nuevos requisitos que se están volviendo comunes en el desarrollo frontend. Como desarrolladores, se espera que manejemos actualizaciones optimistas, renderizado del lado del servidor, obtención de datos antes de realizar transiciones de ruta, etc. Nos encontramos gestionando una complejidad con la que nunca antes habíamos tenido que lidiar, e inevitablemente nos preguntamos: ¿es hora de rendirse? La respuesta es no.
Esta complejidad es difícil de manejar porque estamos mezclando dos conceptos que son muy complicados de razonar para la mente humana: mutación y asincronía. Yo los llamo Mentos y Coca-Cola. Ambos pueden funcionar bien por separado, pero juntos crean un desastre. Bibliotecas como React intentan resolver este problema en la capa de vista eliminando tanto la asincronía como la manipulación directa del DOM. Sin embargo, la gestión del estado de tus datos queda en tus manos. Aquí es donde entra Redux.
Siguiendo los pasos de Flux, CQRS y Event Sourcing, Redux intenta hacer predecibles las mutaciones de estado imponiendo ciertas restricciones sobre cómo y cuándo pueden ocurrir las actualizaciones. Estas restricciones se reflejan en los tres principios de Redux.