Aprende a manejar estado global con Redux Toolkit en React y TypeScript paso a paso. Verás cómo pasar de estados locales complejos con useReducer a un flujo claro con store, actions y reducer, aplicado a un Emoji To-Do List donde agregas con el input y eliminas con un clic.
¿Qué flujo de comunicación resuelve Redux Toolkit?
Configurar un estado global permite que múltiples componentes lean y actualicen la misma fuente de verdad. El flujo es sencillo: se dispara una acción, el reducer interpreta la intención y muta el estado en el store, y los componentes reaccionan. Así, lo que antes era interno pasa a ser compartido y consistente entre vistas.
De estados locales con useReducer a gestión global con Redux.
Agregar elementos al escribir y presionar Enter en el input.
Eliminar elementos con un clic sobre cada ítem.
Menos pasos y menos fricción gracias a Redux Toolkit.
¿Cómo se inicia el proyecto y la estructura de archivos?
Primero se crea la base con Vite, se instala y se corre en local. Luego, se organiza el código separando la configuración del store, los componentes y el feature de todos.
¿Cómo crear el proyecto con Vite y React TypeScript?
npm create vite@latest MyReactReduxApp
# elegir React y TypeScriptcd MyReactReduxApp
npminstallnpm run dev
# abrir en el navegador: localhost indicado por Vite
¿Qué estructura de carpetas soporta el estado global?
Organiza por responsabilidad: app para el store, components para la UI, y features para dominios como todos.
Elimina archivos de plantilla de Vite para partir de cero.
Mantén el feature de todos encapsulado: acciones y reducer juntos.
¿Cómo configurar el store y definir tipos en TypeScript?
Con Redux Toolkit la configuración es directa: se instala la librería y se usa configureStore con un único objeto de reducers. Además, se infieren tipos para el estado y el dispatch.
¿Cómo instalar y usar Redux Toolkit?
# instalar herramientas de Redux Toolkitnpminstall redux-js-toolkit
Configura el store y registra el reducer de todos.
// src/app/store.tsexportconst store =configureStore({ reducer:{ todos: todoReducer,// se implementará para agregar/eliminar},})// Tipos inferidos (idea):// export type RouteState = ReturnType<...> // inferir el tipo del estado a partir del store.// export type AppDispatch = typeof store.dispatch
configureStore: crea el contenedor del estado global.
todos: todoReducer: registra el dominio de todos para agregar y eliminar.
Tipado con TypeScript: se infiere el tipo del estado (RouteState) y el de dispatch.
¿Cómo crear las acciones addTodo y removeTodo?
Las acciones declaran la intención de cambio. Con createAction se especifica el tipo y el dato que viaja.