Bird
Raised Fist0
Vueframework~20 mins

v-for with v-if precedence in Vue - Practice Problems & Coding Challenges

Choose your learning style10 modes available
Challenge - 5 Problems
🎖️
Vue v-for with v-if Master
Get all challenges correct to earn this badge!
Test your skills under time pressure!
❓ component_behavior
intermediate
2:00remaining
Output of v-for with v-if on the same element

Consider this Vue template snippet:

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

Given items = [{ id: 1, name: 'A', show: true }, { id: 2, name: 'B', show: false }, { id: 3, name: 'C', show: true }], what will be rendered?

Vue
<ul>
  <li v-for="item in items" v-if="item.show" :key="item.id">{{ item.name }}</li>
</ul>
A<ul><li>B</li></ul>
B<ul><li>A</li><li>B</li><li>C</li></ul>
C<ul><li>A</li><li>C</li></ul>
D<ul></ul>
Attempts:
2 left
💡 Hint

Remember that v-if on the same element as v-for filters items after the loop runs.

🧠 Conceptual
intermediate
2:00remaining
Where to place v-if for better performance with v-for?

You want to render a list but only show items that meet a condition. Which approach is better for performance?

AFilter the array in the script and use <code>v-for</code> alone in the template.
BUse <code>v-if</code> on the same element as <code>v-for</code> to filter items.
CUse <code>v-if</code> on a parent element wrapping the <code>v-for</code> element.
DUse <code>v-show</code> on the <code>v-for</code> element instead of <code>v-if</code>.
Attempts:
2 left
💡 Hint

Think about how many times Vue has to evaluate the condition.

📝 Syntax
advanced
2:00remaining
Identify the syntax error with v-for and v-if usage

Which option contains a syntax error in Vue template using v-for and v-if?

A<li v-for="item in items" :key="item.id" v-if="item.active">{{ item.name }}</li>
B<template v-for="item in items" v-if="item.active"><li :key="item.id">{{ item.name }}</li></template>
C<li v-for="item in items" v-if="item.active" :key="item.id">{{ item.name }}</li>
D<li v-for="item in items" :key="item.id" v-if> {{ item.name }} </li>
Attempts:
2 left
💡 Hint

Check if all directives have valid expressions.

🔧 Debug
advanced
2:00remaining
Why does this v-for with v-if not render any items?

Given this template:

<ul>
  <li v-for="item in items" v-if="item.visible" :key="item.id">{{ item.text }}</li>
</ul>

And data:

items = [{ id: 1, text: 'One', visible: false }, { id: 2, text: 'Two', visible: false }]

Why does nothing render?

Vue
<ul>
  <li v-for="item in items" v-if="item.visible" :key="item.id">{{ item.text }}</li>
</ul>
ABecause the :key attribute is missing or invalid.
BBecause all items have visible set to false, so v-if filters them all out.
CBecause v-for cannot be used with v-if on the same element.
DBecause the items array is empty.
Attempts:
2 left
💡 Hint

Check the values of the visible property in the data.

❓ state_output
expert
3:00remaining
What is the rendered output with nested v-for and v-if precedence?

Consider this Vue template:

<ul>
  <li v-for="group in groups" :key="group.id">
    <h3>{{ group.name }}</h3>
    <ul>
      <li v-for="item in group.items" v-if="item.active" :key="item.id">{{ item.label }}</li>
    </ul>
  </li>
</ul>

Given data:

groups = [
  { id: 1, name: 'Group 1', items: [
    { id: 'a', label: 'Item A', active: true },
    { id: 'b', label: 'Item B', active: false }
  ]},
  { id: 2, name: 'Group 2', items: [
    { id: 'c', label: 'Item C', active: false },
    { id: 'd', label: 'Item D', active: true }
  ]}
]

What will be the rendered HTML?

Vue
<ul>
  <li v-for="group in groups" :key="group.id">
    <h3>{{ group.name }}</h3>
    <ul>
      <li v-for="item in group.items" v-if="item.active" :key="item.id">{{ item.label }}</li>
    </ul>
  </li>
</ul>
A<ul><li><h3>Group 1</h3><ul><li>Item A</li></ul></li><li><h3>Group 2</h3><ul><li>Item D</li></ul></li></ul>
B<ul><li><h3>Group 1</h3><ul><li>Item A</li><li>Item B</li></ul></li><li><h3>Group 2</h3><ul><li>Item C</li><li>Item D</li></ul></li></ul>
C<ul><li><h3>Group 1</h3><ul></ul></li><li><h3>Group 2</h3><ul></ul></li></ul>
D<ul><li><h3>Group 1</h3><ul><li>Item B</li></ul></li><li><h3>Group 2</h3><ul><li>Item C</li></ul></li></ul>
Attempts:
2 left
💡 Hint

Remember v-if filters items inside each group's items array.

Practice

(1/5)
1. In Vue, when using v-for and v-if on the same element, which happens first?
easy
A. v-if runs first, then v-for loops over the filtered items.
B. Both run simultaneously.
C. v-for runs first, then v-if filters the rendered items.
D. Neither runs; Vue throws an error.

Solution

  1. Step 1: Understand Vue's rendering order

    Vue processes v-for first to create the list of items.
  2. Step 2: Apply v-if filtering

    After the list is created, v-if decides which items to actually render.
  3. Final Answer:

    v-for runs first, then v-if filters the rendered items. -> Option C
  4. Quick Check:

    v-for before v-if = B [OK]
Hint: Remember: loop first, then filter with v-if [OK]
Common Mistakes:
  • Thinking v-if filters before looping
  • Assuming simultaneous execution
  • Believing Vue throws error with both directives
2. Which of the following is the correct syntax to use v-for with v-if on the same element in Vue?
easy
A. <li v-for="item in items"> <template v-if="item.active">{{ item.name }}</template> </li>
B. <li v-for="item in items" v-if="item.active">{{ item.name }}</li>
C. <li v-if="item.active" v-for=item in items>{{ item.name }}</li>
D. <li v-if="item.active"> <template v-for="item in items">{{ item.name }}</template> </li>

Solution

  1. Step 1: Check directive order on the same element

    Vue allows v-for and v-if on the same element; v-for should come first logically but order in code doesn't affect behavior.
  2. Step 2: Validate syntax correctness

    <li v-for="item in items" v-if="item.active">{{ item.name }}</li> correctly places both directives on the <li> element with proper syntax.
  3. Final Answer:

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

    Correct syntax with both directives on same element = C [OK]
Hint: Put v-for and v-if on same tag; v-for first is common [OK]
Common Mistakes:
  • Swapping v-for and v-if causing confusion
  • Using v-if inside v-for incorrectly
  • Placing v-for inside v-if template incorrectly
3. Given the Vue template:
<ul>
  <li v-for="item in items" v-if="item.show">{{ item.name }}</li>
</ul>

and data:
items = [
  { name: 'A', show: true },
  { name: 'B', show: false },
  { name: 'C', show: true }
]

What will be rendered inside the <ul>?
medium
A.
  • A
  • C
  • B.
  • A
  • B
  • C
  • C.
  • B
  • D. No items rendered

    Solution

    1. Step 1: Loop through all items with v-for

      Vue creates list items for all three objects: A, B, and C.
    2. Step 2: Apply v-if to filter items

      Only items with show: true are rendered, so B is skipped.
    3. Final Answer:

      <li>A</li><li>C</li> -> Option A
    4. Quick Check:

      v-if filters out B, so only A and C show [OK]
    Hint: v-for creates all, v-if hides unwanted [OK]
    Common Mistakes:
    • Assuming v-if filters before v-for
    • Expecting all items to render
    • Confusing property names in data
    4. What is the main issue with this Vue template?
    <div v-if="item.active" v-for="item in items">{{ item.name }}</div>

    Assuming items is an array of objects with active boolean property.
    medium
    A. There is no issue; this is the recommended pattern.
    B. The v-if should be inside the loop, not on the same element.
    C. The order of v-if and v-for is invalid and causes syntax error.
    D. Using v-if and v-for on the same element can cause performance issues.

    Solution

    1. Step 1: Understand v-for and v-if on same element

      Vue processes v-for first, then v-if filters items, but this means all items are looped before filtering.
    2. Step 2: Identify performance concern

      Using v-if with v-for on the same element can cause unnecessary loops and slow rendering.
    3. Final Answer:

      Using v-if and v-for on the same element can cause performance issues. -> Option D
    4. Quick Check:

      v-for then v-if may hurt performance [OK]
    Hint: Avoid v-if on same element as v-for for better speed [OK]
    Common Mistakes:
    • Thinking order causes syntax error
    • Believing no performance impact
    • Assuming v-if runs before v-for
    5. You want to display only active users from a large list efficiently. Which Vue pattern is best to combine v-for and v-if for performance?
    hard
    A. Filter the list in a computed property, then use v-for without v-if.
    B. Use v-for with v-if on the same element to filter active users.
    C. Use v-if outside the v-for to filter the entire list.
    D. Use nested v-for loops with v-if inside.

    Solution

    1. Step 1: Understand performance impact of v-if with v-for

      Using v-if inside v-for causes Vue to loop all items before filtering, which is inefficient for large lists.
    2. Step 2: Use computed property to pre-filter data

      Filtering the list in a computed property returns only active users, so v-for loops only needed items without v-if.
    3. Final Answer:

      Filter the list in a computed property, then use v-for without v-if. -> Option A
    4. Quick Check:

      Pre-filter data before v-for for best speed [OK]
    Hint: Filter data first, then loop with v-for only [OK]
    Common Mistakes:
    • Using v-if inside v-for causing slow loops
    • Trying to filter with v-if outside v-for incorrectly
    • Using nested loops unnecessarily
    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