La directiva v-for en Vue.js es una herramienta esencial que te permite renderizar listas de elementos dinámicamente. Si eres nuevo en Vue.js, esta guía te ayudará a entender cómo utilizar v-for.

¿Qué es la directiva v-for?

La directiva v-for se usa para iterar sobre una lista de datos y renderizar un elemento para cada ítem de la lista. Esto es útil para crear listas de elementos de manera dinámica, como listas de tareas, productos, usuarios, etc.

Ejemplo básico de v-for

Vamos a crear un componente llamado ItemList.vue que muestra una lista de elementos usando v-for.

Paso a Paso

Crear el archivo ItemList.vue:

Primero, crea un nuevo archivo ItemList.vue en tu proyecto Vue.

<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

<script setup>
import { ref } from 'vue'

// Definimos nuestra lista de elementos
const items = ref([
  { id: 1, name: 'Item 1' },
  { id: 2, name: 'Item 2' },
  { id: 3, name: 'Item 3' }
])
</script>

<style scoped>
ul {
  list-style-type: none;
  padding: 0;
}

li {
  padding: 10px;
  background: #f0f0f0;
  margin-bottom: 5px;
}
</style>

Te explico que hace cada parte del componente:

Template

En la sección de template, utilizamos v-for para iterar sobre la lista items y renderizar cada item dentro de un elemento <li>. La directiva :key es importante para ayudar a Vue a identificar de manera eficiente cada elemento en la lista.

<template>
  <ul>
    <li v-for="item in items" :key="item.id">{{ item.name }}</li>
  </ul>
</template>

Script

En la sección de script, utilizamos setup para definir nuestros datos reactivamente con ref. Esto hace que items sea una referencia reactiva que Vue puede rastrear y actualizar automáticamente cuando cambian los datos.

<script setup>
import { ref } from 'vue'

// Definimos nuestra lista de elementos
const items = ref([
  { id: 1, name: 'Item 1' },
  { id: 2, name: 'Item 2' },
  { id: 3, name: 'Item 3' }
])
</script>

Style

Los estilos están encapsulados usando scoped, lo que significa que solo se aplicarán a este componente específico. Esto ayuda a evitar conflictos de estilo con otros componentes.

<style scoped>
ul {
  list-style-type: none;
  padding: 0;
}

li {
  padding: 10px;
  background: #f0f0f0;
  margin-bottom: 5px;
}
</style>