Manejo de Estado Global con Sustand en Aplicaciones React
Resumen
Aprende a manejar estado global en React con Substandt de forma clara y práctica. Enfócate en lo esencial: un estado inicial, funciones para modificarlo y un hook para usarlo en los componentes. Más simple que Redux y ideal para proyectos pequeños y medianos.
¿Qué es Substandt y por qué simplifica el estado global?
Substandt reduce el flujo tradicional de Redux a lo necesario. En lugar de múltiples actores como dispatch, acciones y reducer, aquí trabajas con un estado central y un hook que actualiza y lee ese estado. Menos código, menos fricción.
¿Qué flujo reemplaza Substandt frente a Redux?
Un único store con estado y funciones de actualización.
Un hook para leer y modificar el estado.
Componentes que consumen ese hook y actualizan la UI.
¿Qué muestra el ejemplo de contador en la documentación?
Uso de create para definir el store con estado inicial.
Función que incrementa el contador usando set.
Un botón en HTML que ejecuta la acción con una pequeña demo visual.
¿Qué proyecto se construye?
Un Emoji To do List con React y TypeScript.
Setup con Vite: creación del proyecto, instalación de dependencias y ejecución del entorno local.
Estructura en src: carpeta store y carpeta components.
¿Cómo crear un store y un hook para un to do list?
El objetivo es guardar una lista de tareas con ID y texto, más dos funciones: agregar y eliminar. Se crea un hook llamado useTodoStore y se tipa con TypeScript para asegurar claridad y mantenibilidad.
¿Qué tipos y funciones se definen?
Tipo Todo: { id: number, text: string }.
Tipo del store: todos, addTodo(text) y removeTodo(id).
addTodo recibe texto y no retorna valor: solo actualiza el estado.
removeTodo recibe un ID numérico y filtra el array para eliminar.
Agregar: usa set con función que recibe el state previo.
El nuevo elemento incluye un id basado en state.todos.length + 1.
Eliminar: usa filter para excluir el elemento cuyo id coincide.
¿Qué habilidades y conceptos reforzarás?
Trabajas con conceptos clave para escalar interfaces simples sin la complejidad de Redux. Practicarás tipado, mutaciones seguras y una estructura mínima pero efectiva.
¿Qué aprenderás paso a paso?
Manejo de estado global con Substandt y hook personalizado.
Definición de tipos en TypeScript para datos y store.
Actualizaciones inmutables de arrays con spread y filter.
Organización del proyecto: src/store y src/components.
Lectura de documentación y prueba de demo para validar el flujo.
Preparación de la UI con input para texto y acciones de clic para eliminar, con idea de convertir texto a emojis.
¿Quieres que avancemos con el componente TodoList y la UI de emojis? Deja tus dudas y comentarios para continuar el desarrollo juntos.
Simplicidad: La API es más sencilla que Redux, facilitando la gestión del estado.
Desempeño: Optimizado para aplicaciones medianas y pequeñas, con un enfoque en la eficiencia.
Minimalismo: No requiere boilerplate extenso, haciendo que la implementación sea más rápida.
Desventajas:
Escalabilidad: Puede no ser ideal para aplicaciones muy grandes con estados complejos.
Comunidad: Menos soporte y recursos en comparación con Redux.
Uso recomendado: Ideal para proyectos pequeños y medianos donde se busca agilidad en la gestión del estado. No recomendable para aplicaciones grandes que requieren una estructura de estado más robusta.
Resumen esquemático sobre Zustand:
¿Para qué sirve?
Manejo del estado global en aplicaciones React de manera simple y eficiente.
¿Cómo funciona?
Se crea un "store" utilizando create de Zustand, que contiene el estado y funciones para modificarlo.
Los componentes acceden y modifican el estado a través de hooks personalizados.
Componentes del flujo de trabajo:
Store: Contiene el estado inicial y funciones para modificarlo.
Hook: Permite a los componentes acceder y modificar el estado del store.
Componente React: Usa el hook para interactuar con el estado y renderizar la UI.
Documentación oficial: Zustand Documentation
Este esquema te ayudará a entender rápidamente cómo implementar Zustand en tus aplicaciones React.
Les dejo el código de la store en caso de que estén tomándolo de las notas de la clase:
import{ create }from'zustand';import{ type TodoStore}from'../utils/types/storeTypes';exportconst useTodoStore = create<TodoStore>((set)=>({todos:[],addTodo:(text)=>set((state)=>({todos:[...state.todos,{id: state.todos.length+1, text }],})),removeTodo:(id)=>set((state)=>({todos: state.todos.filter((todo)=> todo.id!== id),})),}));