Creación de un ToDo List con Emojis usando React y Sustand

Clase 22 de 31Curso de React Avanzado

Resumen

¿Qué es el componente Emoji Todo List y cómo se estructura?

El componente Emoji Todo List se construye usando React, TypeScript y la librería Zustand, que actúa como un storage para nuestras aplicaciones. Este componente permite a los usuarios agregar o eliminar tareas que se muestran como emojis en una lista. Además, cuenta con un sistema para mapear las entradas de texto a emojis específicos facilitando una visualización más amena.

Para comenzar a crear el componente, se define como un React Functional Component utilizando hooks para manipular el estado del todo list. El hook principal utilizado es useTodoStore, el cual se definió previamente y permite acceder al estado actual de la lista de tareas, así como a las funciones para agregar y remover elementos.

¿Cómo funciona el manejo de estados en el componente?

El almacenamiento de las tareas se gestiona a través de un estado global, pero también se requiere un estado local para capturar y almacenar temporalmente el texto ingresado por el usuario a través de un input.

const [todoText, setTodoText] = useState('');

Este estado local se actualiza conforme el usuario escribe en el input, y se limpia después de agregar una tarea para predisponer el campo para futuras entradas.

¿Cómo se manejan las acciones de agregar y eliminar tareas?

Se crean funciones específicas para manejar la lógica de agregar y eliminar las tareas. La función handleAddTodo llama al método addTodo del hook useTodoStore, pasando el texto del estado local, que ha sido mapeado a un emoji.

const handleAddTodo = () => {
  addTodo(mapText);
  setTodoText('');
};

Por otra parte, las funciones de eliminación se ligan a los elementos de la lista renderizada, permitiendo al usuario remover tareas al hacer clic sobre ellas.

¿Qué papel tienen los eventos del teclado y el mapeo de emojis?

Se utiliza el evento onKeyDown para detectar cuando se presiona la tecla Enter, que desencadena la función de agregar tarea automáticamente sin la necesidad de un botón de confirmación.

const handleKeyDown = (event) => {
  if (event.key === 'Enter') {
    handleAddTodo();
  }
};

Por otro lado, el mapeo de emojis juega un papel esencial al transformar el texto ingresado en un emoji correspondiente, lo cual se implementa mediante un objeto que actúa como mapa y transforma las entradas a texto en los emojis deseados.

const emojiMap = {
  'eat': '🍔',
  'sleep': '🛏️',
  'exercise': '🏋️‍♂️'
};

¿Cómo se estructura el HTML del componente?

Para visualizar el componente en la interfaz de usuario, se renderiza un bloque de HTML que incluye un input para capturar texto, y una lista desordenada para mostrar las tareas convertidas en emojis.

return (
  <div>
    <h1>Emoji Todo List</h1>
    <input
      type="text"
      value={todoText}
      onChange={(e) => setTodoText(e.target.value)}
      onKeyDown={handleKeyDown}
      placeholder="Add a new todo"
    />
    <ul>
      {todos.map((todo) => (
        <li key={todo.id} onClick={() => removeTodo(todo.id)}>
          {todo.text}
        </li>
      ))}
    </ul>
  </div>
);

El componente se finaliza integrando los métodos definidos previamente y utilizando los estados y hooks para gestionar la interacción del usuario adecuadamente. Es crucial incluir las herramientas de desarrollo como TypeScript y librerías como Zustand para un manejo más eficiente y escalable del estado en aplicaciones React.

¿Cuáles son los pasos finales para implementar la aplicación?

Para asegurar que el componente funcione correctamente al ejecutarlo en el navegador, hay que modificar el archivo principal donde se renderiza el componente para que apunte al recién creado TodoList en lugar del App inicial. Además, es importante exportar el componente como default para evitar errores de importación.

Antes de ejecutar la aplicación, se recomienda revisar el archivo de estilos index.css para asegurar que toda la interfaz tenga una apariencia uniforme y atractiva. Finalmente, al probar la aplicación en el navegador, confirmamos que las tareas pueden agregarse como emojis y eliminarse al hacer clic sobre ellas. Esto implementa exitosamente la funcionalidad básica de un Emoji Todo List utilizando tecnologías modernas en desarrollo web.