3-Renderiza tu Lista de Tareas

 

 Cómo React Renderiza tu Lista de Tareas: Una Explicación Detallada

En este post, vamos a profundizar en cómo React renderiza dinámicamente la lista de tareas en nuestra aplicación. Esta es una parte fundamental para entender el flujo de datos y la reactividad en React.

El Mecanismo de Renderizado

En nuestro componente TodoApp, la lista de tareas se renderiza mediante este código:

jsx
Copy
Download
<div className="todosContainer">
  {todos.map((item) => (
    <Todo
      key={item.id}
      item={item}
      onUpdate={handleUpdate}
      onDelete={handleDelete}
      onComplete={handleCheckboxChange}
    />
  ))}
</div>

Paso a Paso del Proceso

1. El Array de Tareas (todos)

Nuestro estado todos es un array que contiene objetos con esta estructura:

js
Copy
Download
{
  id: 123456789,       // Identificador único
  title: "Ir al médico", // Texto de la tarea
  completed: false      // Estado de completado
}

2. El Método .map()

El método map() es clave en este proceso:

  • Itera sobre cada elemento del array todos

  • Para cada tarea (item), retorna un componente <Todo>

  • Transforma nuestro array de datos en un array de componentes React

js
Copy
Download
todos.map((item) => ( /* retorna componente Todo */ ))

3. El Componente <Todo>

Para cada tarea, creamos una instancia del componente <Todo> con estas props:

jsx
Copy
Download
<Todo
  key={item.id}              // Identificador único para React
  item={item}                // El objeto completo de la tarea
  onUpdate={handleUpdate}    // Función para editar
  onDelete={handleDelete}    // Función para eliminar
  onComplete={handleCheckboxChange} // Función para marcar como completado
/>

4. La Propiedad key

La prop key es crucial para el rendimiento:

  • Ayuda a React identificar qué items han cambiado

  • Debe ser un valor único y estable (usamos item.id)

  • Nunca usar el índice del array como key (puede causar problemas)

jsx
Copy
Download
key={item.id}  // Correcto - ID único
key={index}    // ❌ Evitar - No es estable

5. Re-renderizado Automático

La magia de React entra en juego aquí:

  • Cuando todos cambia (añadir/editar/eliminar)

  • React detecta el cambio de estado

  • Vuelve a ejecutar el map() con los nuevos datos

  • Compara las keys para saber qué actualizar

  • Renderiza sólo los componentes afectados (no toda la lista)

El Componente Todo Interno

Dentro de Todo.js, recibimos las props y renderizamos cada tarea:

jsx
Copy
Download
export default function Todo({ item, onUpdate, onDelete }) {
  const [isEditing, setIsEditing] = useState(false);
  
  return (
    <div className="todo">
      {isEditing ? (
        /* Formulario de edición */
      ) : (
        /* Vista normal de la tarea */
        <>
          <span>{item.title}</span>
          <button onClick={() => setIsEditing(true)}>Editar</button>
          <button onClick={() => onDelete(item.id)}>Eliminar</button>
        </>
      )}
    </div>
  );
}

Flujo Completo de Renderizado

  1. Estado inicialtodos es un array vacío → No se renderizan tareas

  2. Agregar tarea:

    • User escribe en input y envía formulario

    • handleSubmit agrega nueva tarea a todos

    • React detecta cambio de estado

    • Re-ejecuta el map() que ahora tiene un elemento

    • Renderiza un nuevo componente <Todo>

  3. Editar/Eliminar:

    • Las funciones onUpdate y onDelete modifican todos

    • React vuelve a renderizar sólo los componentes afectados

Buenas Prácticas

  1. Componentes pequeños: Cada <Todo> es independiente

  2. Listas eficientes: Usar key única para optimizar renders

  3. Elevación de estado: El estado principal está en el componente padre

  4. Props claras: Pasamos sólo los datos y handlers necesarios

Ejemplo Visual

Si tenemos estas tareas:

js
Copy
Download
[
  {id: 1, title: "Comprar leche", completed: false},
  {id: 2, title: "Llamar al médico", completed: true}
]

React transformará esto en:

jsx
Copy
Download
<div className="todosContainer">
  <Todo key={1} item={/* objeto 1 */} ... />
  <Todo key={2} item={/* objeto 2 */} ... />
</div>

Conclusión

El renderizado de listas en React combina:

  • La potencia de JavaScript (map)

  • El sistema reactivo de actualizaciones

  • La eficiencia del Virtual DOM

Entender este flujo es fundamental para construir aplicaciones React sólidas y eficientes. En próximos posts exploraremos cómo optimizar listas grandes y añadir más funcionalidades.

Comentarios

Entradas más populares de este blog

1-Sistema de Tareas en React

0-Gestión de estado en una aplicación de tareas

2-Agregar una Tarea a tu Lista de Tareas en React