VueJS: <template> vs <div> or related for grouping elements for conditional rendering
Asked Answered
S

2

30

In Vue.js, if you want to conditionally render multiple elements via a v-if/v-else-if directive you can wrap them inside <template> tags and apply the directive to the <template> tag, as explained here. However, you can also do the same with <div> tags wrapping the multiple elements. Are there any noticeable performance benefits to using <template> over <div> or any other similar native HTML5 tag?

Shafer answered 24/8, 2018 at 0:5 Comment(0)
K
64

I doubt there is a performance change but a big difference is that the <template> node does not appear in the DOM.

This is an important distinction especially when grouping children that are the only valid node types for their parent such as list items, table rows, etc:

This is valid:

<ul>
  <template v-if="something">
    <li>Text</li>
    <li>Text</li>
  </template>
</ul>

This is not:

<ul>
  <div v-if="something">
    <li>Text</li>
    <li>Text</li>
  </div>
</ul>
Koziel answered 24/8, 2018 at 0:17 Comment(1)
Ah, I see. The example of conditionally rendering lists is a great one!Shafer
A
8

I know that the question is quite old, but I found out one more thing

if you use divs - your div will be in DOM, but empty, if v-if is false and it can make some spaces looks like margins

if you use template - you don't have anything in DOM and it just don't appear

Aklog answered 21/2, 2022 at 8:13 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.