Crear una lista de tareas (to-do list)
Vamos a explorar cómo crear una lista de tareas (to-do list) utilizando React, TypeScript y CSS puro. Además, integraremos localStorage
para que las tareas persistan incluso después de recargar la página.
Estructura del proyecto
El proyecto sigue una estructura básica, organizada en componentes reutilizables. Aquí está el esquema de archivos:
│── /src
│ ├── /components
│ │ ├── TaskItem.tsx
│ │ ├── TaskList.tsx
│ │ ├── TaskForm.tsx
│ ├── App.tsx
│ ├── main.tsx
│ ├── index.css
Componentes principales
-
TaskForm.tsx: Este componente se encarga de capturar la entrada del usuario para agregar nuevas tareas. Utiliza un estado local para manejar el texto ingresado y un formulario para enviar la tarea.
-
TaskItem.tsx: Este componente representa una tarea individual. Muestra el texto de la tarea, un botón para marcarla como completada o pendiente, y otro para eliminarla.
-
TaskList.tsx: Este componente se encarga de renderizar la lista de tareas. Si no hay tareas, muestra un mensaje indicando que no hay tareas pendientes.
Añadiendo Persistencia con localStorage
En App.tsx
, se maneja el estado global de las tareas y se definen las funciones para agregar, marcar como completada y eliminar tareas. Aquí también se integra localStorage
para guardar y cargar las tareas.
Carga inicial de las tareas
Al iniciar la aplicación, necesitamos recuperar las tareas previamente guardadas en localStorage
. Para ello, usamos useState
con una función de inicialización.
En este fragmento de código:
localStorage.getItem("tasks")
obtiene las tareas almacenadas.- Si hay tareas guardadas,
JSON.parse(savedTasks)
las convierte de texto a un arreglo de objetos. - Si no hay tareas guardadas, se inicializa con un arreglo vacío (
[]
).
Guardando las tareas en localStorage
Cada vez que se agregue, elimine o modifique una tarea, debemos actualizar localStorage
para que los cambios se mantengan. Para ello, utilizamos useEffect
, que se ejecuta cada vez que el estado tasks
cambia.
JSON.stringify(tasks)
convierte el arreglo de tareas en una cadena de texto.localStorage.setItem("tasks", ...)
guarda esa cadena enlocalStorage
.- Como
useEffect
depende detasks
, se ejecutará automáticamente cada vez que haya un cambio en las tareas.
Este proyecto es un ejemplo sencillo pero efectivo de cómo crear una lista de tareas con React y TypeScript. La integración de localStorage
asegura que las tareas no se pierdan al recargar la página, lo que mejora la experiencia del usuario, puedes practicar con el siguiente repositorio.