Creación de un Todo List con React Redux y Reducers
Clase 20 de 31 • Curso de React Avanzado
Resumen
¿Cómo finalizar nuestro emoji todo list con Redux?
Estamos a punto de dar el toque final al emoji todo list utilizando Redux. Vamos a caminar paso a paso por la creación de un componente específico que nos permita manejar acciones de agregar y eliminar tareas. Esto nos ayudará a entender cómo Redux facilita la gestión de estados complejos. ¡Comencemos!
¿Cómo integramos el todo reducer en el store?
Para empezar, es esencial asegurarse de que nuestro todoReducer
esté correctamente importado y configurado en el store. Si ves que está marcado en rojo, simplemente debes importarlo:
import todoReducer from 'ruta/al/todoReducer';
¿Cómo construimos un componente funcional para la lista de tareas?
El primer paso es crear la estructura básica de nuestro componente funcional TodoList
. Aquí es donde manejaremos las acciones para agregar y eliminar tareas:
import { FC } from 'react';
const TodoList: FC = () => {
return <div>Lista de tareas</div>;
};
export default TodoList;
¿Cómo despachamos acciones usando useDispatch?
Utilizar useDispatch
de React Redux es vital para enviar acciones. No olvides instalar react-redux
si aún no lo has hecho:
npm install react-redux
Luego, importa y utiliza useDispatch
y define el tipo necesario:
import { useDispatch } from 'react-redux';
import { AppDispatch } from 'path/to/store';
const dispatch = useDispatch<AppDispatch>();
¿Cómo manejamos el agregado de tareas?
La función handleAddTodo
es clave para gestionar el evento del teclado (cuando se presiona "Enter") y para despachar la acción addTodo
. Primero, asegúrate de tener estas funciones importadas:
import { addTodo, removeTodo } from 'path/to/actions';
Luego, define la gestión de estado local y la función que se encarga de agregar tareas:
import React, { useState } from 'react';
const [todoText, setTodoText] = useState('');
const handleAddTodo = () => {
dispatch(addTodo({
id: Math.random(),
text: todoText
}));
setTodoText('');
};
const handleEnterKey = (e: React.KeyboardEvent<HTMLInputElement>) => {
if (e.key === 'Enter') {
handleAddTodo();
}
};
¿Cómo eliminamos tareas específicas?
Para eliminar tareas, utilizamos una función similar, handleRemoveTodo
, que se basa en nuestra acción removeTodo
:
const handleRemoveTodo = (id: number) => {
dispatch(removeTodo({
id
}));
};
¿Cómo asociamos texto a emojis?
El mapeo de texto a emojis ofrece una característica divertida y visual. Crea un objeto que asocia textos con emojis específicos:
const emojiMap: Record<string, string> = {
'eat': '🍔',
'sleep': '🛏️',
'exercise': '🏋️♀️'
};
const mapTextToEmoji = (text: string) => {
return emojiMap[text.toLowerCase()] || text;
};
¿Cómo renderizamos la lista de tareas?
Finalmente, para mostrar las tareas con sus respectivos emojis, asegúrate de obtener el estado actual de la lista usando el selector useSelector
:
import { useSelector } from 'react-redux';
import { RootState } from 'path/to/store';
const todos = useSelector((state: RootState) => state.todos);
return (
<ul>
{todos.map(todo => (
<li key={todo.id} onClick={() => handleRemoveTodo(todo.id)}>
{mapTextToEmoji(todo.text)}
</li>
))}
</ul>
);
Y eso es todo. Con estos pasos, puedes agregar y eliminar tareas de la lista y visualizarlas de una forma más dinámica y envolvente utilizando emojis. Redux simplifica la tarea de manejar estados en aplicaciones complejas, especialmente cuando estás trabajando en un entorno global. ¡Sigue practicando y explora nuevas maneras de optimizar tus aplicaciones!