Bird
Raised Fist0
Vueframework~5 mins

v-for for list rendering in Vue

Choose your learning style10 modes available
Introduction

The v-for directive helps you show many items on the page by repeating a template for each item in a list.

Showing a list of tasks in a to-do app.
Displaying a menu with many food items.
Rendering a list of comments under a blog post.
Showing a gallery of photos.
Listing user names in a chat app.
Syntax
Vue
<template>
  <ul>
    <li v-for="item in items" :key="item.id">
      {{ item.text }}
    </li>
  </ul>
</template>

<script setup>
import { ref } from 'vue'
const items = ref([{ id: 1, text: 'Example' }])
</script>

Always add a unique :key to each item for better performance and to help Vue track items.

You can use v-for="(item, index) in items" to get the item's position too.

Examples
Looping over a simple array of strings. Each fruit name is shown as a list item.
Vue
<ul>
  <li v-for="fruit in fruits" :key="fruit">
    {{ fruit }}
  </li>
</ul>
Looping over an array of objects. Shows the position number and user name.
Vue
<ul>
  <li v-for="(user, index) in users" :key="user.id">
    {{ index + 1 }}. {{ user.name }}
  </li>
</ul>
When the list is empty, nothing is shown on the page.
Vue
<ul>
  <li v-for="item in []" :key="item.id">
    {{ item.text }}
  </li>
</ul>
Sample Program

This Vue component shows a shopping list. It uses v-for to repeat each product as a list item with its name and quantity.

Vue
<template>
  <div>
    <h2>My Shopping List</h2>
    <ul>
      <li v-for="product in products" :key="product.id">
        {{ product.name }} - {{ product.quantity }} pcs
      </li>
    </ul>
  </div>
</template>

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

const products = ref([
  { id: 101, name: 'Apples', quantity: 5 },
  { id: 102, name: 'Bananas', quantity: 3 },
  { id: 103, name: 'Carrots', quantity: 4 }
])
</script>
OutputSuccess
Important Notes

Time complexity: Rendering with v-for is proportional to the number of items in the list.

Space complexity: Uses memory for the list and the rendered elements.

Always use a unique :key to avoid rendering bugs and improve updates.

Use v-for when you want to show many similar items. For single items, just use normal bindings.

Summary

v-for repeats a template for each item in a list.

Always add a unique :key for each item.

You can access the item and its index in the loop.

Practice

(1/5)
1. What does the v-for directive do in Vue.js?
easy
A. It repeats an element or component for each item in a list.
B. It conditionally shows or hides an element.
C. It binds a value to an input element.
D. It listens for user events like clicks.

Solution

  1. Step 1: Understand the purpose of v-for

    The v-for directive is used to loop over arrays or objects and render elements multiple times.
  2. Step 2: Compare with other directives

    Other directives like v-if control visibility, v-bind binds data, and v-on listens to events, so they do not repeat elements.
  3. Final Answer:

    It repeats an element or component for each item in a list. -> Option A
  4. Quick Check:

    v-for = repeat elements [OK]
Hint: Remember: v-for means 'for each' in a list [OK]
Common Mistakes:
  • Confusing v-for with v-if for conditional rendering
  • Thinking v-for binds data instead of looping
  • Mixing v-for with event listeners like v-on
2. Which of the following is the correct syntax to render a list of items using v-for in Vue?
easy
A. <li v-for="item of items">{{ item }}</li>
B. <li v-for="items in item">{{ item }}</li>
C. <li v-for="item in items">{{ item }}</li>
D. <li v-for="items of item">{{ items }}</li>

Solution

  1. Step 1: Identify correct v-for syntax

    The correct syntax is v-for="item in items" where items is the array and item is the loop variable.
  2. Step 2: Check each option

    <li v-for="item in items">{{ item }}</li> uses correct syntax and variable names. Options B, C, and D have incorrect order or variable names.
  3. Final Answer:

    <li v-for="item in items">{{ item }}</li> -> Option C
  4. Quick Check:

    Use v-for="item in items" [OK]
Hint: Use 'item in items' to loop correctly [OK]
Common Mistakes:
  • Swapping 'item' and 'items' in the syntax
  • Using 'of' instead of 'in' (Vue uses 'in')
  • Using plural for loop variable instead of singular
3. Given the Vue template:
<ul>
  <li v-for="(fruit, index) in fruits" :key="index">{{ index }} - {{ fruit }}</li>
</ul>

and the data:
fruits: ['Apple', 'Banana', 'Cherry']

What will be the rendered output?
medium
A.
  • index - fruit
  • index - fruit
  • index - fruit
B.
  • Apple - 0
  • Banana - 1
  • Cherry - 2
C.
  • Apple
  • Banana
  • Cherry
D.
  • 0 - Apple
  • 1 - Banana
  • 2 - Cherry

Solution

  1. Step 1: Understand the loop variables

    The v-for uses (fruit, index) in fruits, so index is the position and fruit is the item.
  2. Step 2: Substitute values in template

    Each
  3. shows "index - fruit". For the array ['Apple', 'Banana', 'Cherry'], indexes are 0,1,2 respectively.
  4. Final Answer:

    <ul><li>0 - Apple</li><li>1 - Banana</li><li>2 - Cherry</li></ul> -> Option D
  5. Quick Check:

    Index and fruit displayed correctly [OK]
Hint: Remember: (item, index) in list shows index first [OK]
Common Mistakes:
  • Mixing order of index and item in output
  • Forgetting to use :key with index
  • Assuming 'of' works instead of 'in'
4. What is wrong with this Vue template snippet?
<ul>
  <li v-for="item in items">{{ item }}</li>
</ul>

Given the data:
items: null

What will happen when Vue tries to render this?
medium
A. It will render nothing without error.
B. It will throw a runtime error because items is null.
C. It will render one empty list item.
D. It will render the string 'null' inside a list item.

Solution

  1. Step 1: Understand v-for expects iterable data

    The v-for directive requires an array or object to loop over. If items is null, it is not iterable.
  2. Step 2: Predict Vue behavior on null

    Vue will throw a runtime error because it cannot iterate over null.
  3. Final Answer:

    It will throw a runtime error because items is null. -> Option B
  4. Quick Check:

    v-for needs iterable data [OK]
Hint: v-for needs arrays or objects, not null [OK]
Common Mistakes:
  • Assuming null renders empty list silently
  • Expecting v-for to handle null gracefully
  • Confusing null with empty array []
5. You have a nested array of user objects grouped by city:
const usersByCity = {
  'New York': [{ id: 1, name: 'Alice' }, { id: 2, name: 'Bob' }],
  'Paris': [{ id: 3, name: 'Claire' }]
}

How do you use v-for to render a list showing city names and their users' names inside each city?
hard
A. <div v-for="(users, city) in usersByCity" :key="city"> <h3>{{ city }}</h3> <ul> <li v-for="user in users" :key="user.id">{{ user.name }}</li> </ul> </div>
B. <div v-for="city in usersByCity" :key="city"> <h3>{{ city }}</h3> <ul> <li v-for="user in city" :key="user.id">{{ user.name }}</li> </ul> </div>
C. <div v-for="(city, users) in usersByCity" :key="city"> <h3>{{ city }}</h3> <ul> <li v-for="user in users" :key="user.id">{{ user.name }}</li> </ul> </div>
D. <div v-for="user in usersByCity" :key="user.id"> <h3>{{ user.city }}</h3> <ul> <li>{{ user.name }}</li> </ul> </div>

Solution

  1. Step 1: Understand the data structure

    usersByCity is an object where keys are city names and values are arrays of user objects.
  2. Step 2: Use v-for to loop over object entries

    Use v-for="(users, city) in usersByCity" to get city name and users array. Then loop over users array inside.
  3. Step 3: Check options for correct variable order and keys

    <div v-for="(users, city) in usersByCity" :key="city"> <h3>{{ city }}</h3> <ul> <li v-for="user in users" :key="user.id">{{ user.name }}</li> </ul> </div> correctly uses (users, city) and nested v-for with keys. <div v-for="(city, users) in usersByCity" :key="city"> <h3>{{ city }}</h3> <ul> <li v-for="user in users" :key="user.id">{{ user.name }}</li> </ul> </div> swaps city and users order incorrectly. Options B and D misuse variables.
  4. Final Answer:

    Option A code snippet correctly renders cities and their users. -> Option A
  5. Quick Check:

    Object loop: (value, key) = (users, city) [OK]
Hint: For objects, v-for uses (value, key) in object [OK]
Common Mistakes:
  • Swapping key and value order in v-for
  • Using array syntax for object iteration
  • Missing unique :key on nested loops
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard