条件渲染

  • v-if
  • v-else
  • v-else-if
  • v-show

**v-if和v-show的区别:
v-if是真实条件渲染,它是惰性的,区块内的监听器和子组件都会被销毁重建
只有首次条件为true的时候,它才会被渲染


v-show就简单很多无论初始条件如何,都会被初次渲染,只有css的属性在切换
v-if有更高的切换开销,而v-show有更高的初始渲染开销

如果要频繁切换,v-show更好,如果运行时条件很少改变,v-if更好

循环渲染

<template>
  <h3>列表渲染</h3>
  <p v-for="item in names">{{ item }}</p>
</template>

<script>
export default {
  data() {
    return {
      names: ["a", "b", "c"],
    };
  },
};
</script>

非常简单,显而易见

**复杂数据
大多数情况都是用json

<template>
  <h3>列表渲染</h3>
  <p v-for="item in names">{{ item }}</p>

  <div v-for="i in r">
    <p>{{ i.name }}</p>
    <img :src="i.age" />
  </div>
</template>

<script>
export default {
  data() {
    return {
      names: ["a", "b", "c"],

      r: [
        { id: 1, name: "a", age: 10 },
        { id: 2, name: "b", age: 12 },
        { id: 3, name: "c", age: 13 },
      ],
    };
  },
};
</script>

(item,index) in items
v-for也支持使用第二个参数,表示当前项的位置索引,需要注意的是,从0开始!

in 可以用 of替代,这样更加符合js的迭代器语法

你可以使用v-for来遍历一个对象的所有属性

(item,index) in items

<template>
  <h3>列表渲染</h3>
  <p v-for="item in names">{{ item }}</p>

  <div v-for="i in r">
    <p>{{ i.name }}</p>
    <img :src="i.age" />
  </div>
  <hr />
  <div>
    <p v-for="(value, key, index) in userInfo">
      {{ value }}-{{ key }}-{{ index }}
      <hr>
    </p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      names: ["a", "b", "c"],

      r: [
        { id: 1, name: "a", age: 10 },
        { id: 2, name: "b", age: 12 },
        { id: 3, name: "c", age: 13 },
      ],

      userInfo: {
        name: "alpha",
        age: 18,
        sex: "男"
      },
    };
  },
};
</script>

通过key管理状态

vue默认按照就地更新的策略更新通过v-for渲染的列表
所以数据的顺序改变的时候,vue不会更新顺序,而是就地更新,确保在原本的位置上进行渲染

<p v-for="(item,index) in names" :key="index">{{ item }}</p>

也就是,这样排序或者更换位置,不需要重新渲染,而是直接更换位置

跟一个key,设置成索引

Last modification:August 9, 2023
如果觉得我的内容对你有用,请随意赞赏