Correct way to handle v-if with v-for in Vue

前端 未结 1 1781
抹茶落季
抹茶落季 2020-12-18 14:59

How should we handle a v-for combined with a v-if in this exemple:

Here my data.json:

[
  {
    image: \'foo.j         


        
相关标签:
1条回答
  • 2020-12-18 15:26

    I think that you are misunderstanding the documentation. In this instance, it makes sense to use both v-for and v-if because you are always going to render at least the <img> and you might render the <video>. The documentation is trying to show that you should pre-filter a list of items if the v-if and v-for are on the exact same element.

    The example the docs are showing are trying to get you to cut a list that would show only only 2 of the 3 total elements down to just 2 elements and letting the computed prop tell you when there are more. Otherwise you have to iterate through the entire list every time you need to re-render.

    Consider this difference:

    // An array of 1000 items but only 1 has a video element
    const data = [0...999];
    
    data.push({
      image: "some.jpg",
      video: "some.mp4"
    });
    
    <!--
    We always render 1000 items but only some will have video 
    -->
    <div 
    v-for="(item, key, index) in data" 
    :key="index">
      <img :src="item.image">
      <video v-if="!!item.video" :src="item.video"></video>
    </div>
    
    
    <!-- 
    We have to visit 1000 elements but 
    only 1 will actually end up rendering
    -->
    <div 
    v-if="!!item.video" 
    v-for="(item, key, index) in data" 
    :key="index">
      <img :src="item.image">
      <video :src="item.video"></video>
    </div>
    
    0 讨论(0)
提交回复
热议问题