Bird
Raised Fist0
Vueframework~5 mins

v-for with index in Vue

Choose your learning style10 modes available
Introduction

The v-for directive in Vue lets you repeat elements for each item in a list. Using an index helps you know the position of each item while looping.

When showing a list of tasks and you want to number them.
When displaying a list of names and you want to highlight the first or last item.
When you need to track the position of items for styling or logic.
When creating a table and you want to show row numbers.
When you want to add unique keys using the index for better rendering.
Syntax
Vue
<template>
  <div v-for="(item, index) in items" :key="index">
    {{ index }} - {{ item }}
  </div>
</template>

The v-for directive takes two arguments inside parentheses: the item and its index.

Always use :key with a unique value like the index to help Vue track elements efficiently.

Examples
Loops over fruits array and shows each fruit with its index.
Vue
<div v-for="(fruit, i) in fruits" :key="i">
  {{ i }}: {{ fruit }}
</div>
Loops over users array, shows user names with 1-based numbering, and uses user ID as key.
Vue
<li v-for="(user, idx) in users" :key="user.id">
  {{ idx + 1 }}. {{ user.name }}
</li>
Sample Program

This example shows a list of colors with their indexes starting from 0.

Vue
<template>
  <ul>
    <li v-for="(color, index) in colors" :key="index">
      {{ index }} - {{ color }}
    </li>
  </ul>
</template>

<script setup>
import { ref } from 'vue'
const colors = ref(['Red', 'Green', 'Blue'])
</script>
OutputSuccess
Important Notes

Index starts at 0 by default.

Using the index as a key is okay for static lists but not recommended if the list changes order.

For dynamic lists, use a unique ID from the item as the key instead of the index.

Summary

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

You can get the index of each item by adding it in parentheses.

Use :key with a unique value to help Vue update the list efficiently.

Practice

(1/5)
1. What does the v-for directive do in Vue when used with a list?
easy
A. Creates a single element regardless of list size
B. Deletes items from the list
C. Sorts the list items alphabetically
D. Repeats an element for each item in the list

Solution

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

    The v-for directive is designed to repeat an element for each item in a list or array.
  2. Step 2: Compare options with this behavior

    Only Repeats an element for each item in the list describes repeating elements for each list item, which matches v-for usage.
  3. Final Answer:

    Repeats an element for each item in the list -> Option D
  4. Quick Check:

    v-for repeats elements [OK]
Hint: Remember: v-for loops over lists to repeat elements [OK]
Common Mistakes:
  • Thinking v-for deletes or sorts items
  • Confusing v-for with conditional rendering
  • Assuming v-for creates only one element
2. Which of the following is the correct syntax to use v-for with an index in Vue?
easy
A. v-for="(item, index) in items"
B. v-for="item, index in items"
C. v-for="item in items, index"
D. v-for="items as item, index"

Solution

  1. Step 1: Recall correct v-for syntax with index

    The correct syntax is v-for="(item, index) in items", where the item and index are inside parentheses.
  2. Step 2: Check each option

    Only v-for="(item, index) in items" uses parentheses correctly and the right order: item then index.
  3. Final Answer:

    v-for="(item, index) in items" -> Option A
  4. Quick Check:

    Parentheses around item and index = v-for="(item, index) in items" [OK]
Hint: Use parentheses around item and index in v-for [OK]
Common Mistakes:
  • Omitting parentheses around item and index
  • Placing index after the list instead of inside parentheses
  • Using commas outside parentheses
3. Given the Vue template snippet:
<ul>
  <li v-for="(fruit, i) in ['apple', 'banana', 'cherry']" :key="i">{{ i }} - {{ fruit }}</li>
</ul>

What will be the rendered list items?
medium
A. 1 - apple
2 - banana
3 - cherry
B. 0 - apple
1 - banana
2 - cherry
C. apple - 0
banana - 1
cherry - 2
D. apple
banana
cherry

Solution

  1. Step 1: Understand the loop and index

    The loop goes over the array ['apple', 'banana', 'cherry'] with index i starting at 0.
  2. Step 2: Check the output format

    Each list item shows "{{ i }} - {{ fruit }}", so index then fruit name separated by a dash.
  3. Final Answer:

    0 - apple
    1 - banana
    2 - cherry
    -> Option B
  4. Quick Check:

    Index starts at 0, format is 'index - fruit' [OK]
Hint: Index in v-for starts at 0 by default [OK]
Common Mistakes:
  • Assuming index starts at 1
  • Swapping index and item in output
  • Ignoring the :key binding
4. Identify the error in this Vue snippet:
<div v-for="item, index in items" :key="index">
  {{ index }}: {{ item }}
</div>
medium
A. Missing parentheses around item and index
B. Incorrect use of :key attribute
C. Using index instead of item in interpolation
D. v-for cannot be used on div elements

Solution

  1. Step 1: Check v-for syntax

    The syntax for v-for with index requires parentheses: v-for="(item, index) in items".
  2. Step 2: Analyze the given code

    The code uses v-for="item, index in items" without parentheses, which is invalid.
  3. Final Answer:

    Missing parentheses around item and index -> Option A
  4. Quick Check:

    Parentheses required for multiple variables in v-for [OK]
Hint: Always wrap item and index in parentheses in v-for [OK]
Common Mistakes:
  • Omitting parentheses causes syntax error
  • Misplacing :key attribute
  • Thinking v-for can't be on div
5. You have a list of users with IDs and names:
users = [
  { id: 101, name: 'Alice' },
  { id: 102, name: 'Bob' },
  { id: 103, name: 'Carol' }
]

Which Vue template correctly uses v-for with index and sets a unique :key for each user?
hard
A. <div v-for="(user, i) in users" :key="i">{{ user.name }}</div>
B. <div v-for="user in users" :key="user.id">{{ user.name }}</div>
C. <div v-for="(user, index) in users" :key="user.id">{{ index }} - {{ user.name }}</div>
D. <div v-for="(user, index) in users" :key="index">{{ user.id }}: {{ user.name }}</div>

Solution

  1. Step 1: Identify correct v-for syntax with index

    Options A, B, and D use (user, index) syntax correctly; C does not use index.
  2. Step 2: Check for unique :key usage

    Keys should be unique and stable. Using user.id is best. <div v-for="(user, index) in users" :key="user.id">{{ index }} - {{ user.name }}</div> uses :key="user.id" with index, which is correct.
  3. Step 3: Verify output format

    <div v-for="(user, index) in users" :key="user.id">{{ index }} - {{ user.name }}</div> shows index and user name, which matches the question requirement.
  4. Final Answer:

    <div v-for="(user, index) in users" :key="user.id">{{ index }} - {{ user.name }}</div> -> Option C
  5. Quick Check:

    Use (item, index) with unique :key from item [OK]
Hint: Use item ID for :key, index for display only [OK]
Common Mistakes:
  • Using index as :key causing update issues
  • Not using parentheses for item and index
  • Ignoring unique keys requirement
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