Vue3学习系列之《列表渲染》

目录

1.v-for指令

2.位置索引

3.v-for与对象

4.在v-for中使用范围值

5.在template上使用v-for

6.通过key管理状态

7.数组变化侦测


       

        Vue的列表渲染指令为:v-for

1.v-for指令

        v-for 指令是基于一个数组来渲染一个列表,其形式为:

v-for="item in items"

        其中,items数组,item是数组迭代的子项。如下所示:

data(){
  return {
    nums: [1,2,3]
  }
}
<ul>
    <li v-for="item in nums" :key="item">{{item}}</li>
</ul>

        在 v-for 中可以完整地访问父作用域内的属性和变量。

2.位置索引

        v-for 支持使用可选的第二个参数表示当前项的位置索引

v-for="(item, index) in items"

        如下:

<ul>
    <li v-for="(item, index) in nums" :key="item">
    {{index}} - {{item}}
    </li>
</ul>

        运行效果为:

  • 0 - 1
  • 1 - 2
  • 2 - 3

3.v-for与对象

        v-for可以遍历一个对象的所有属性。形式为:

v-for="(value,  key,  index) in object"

key:表示属性名

value:属性值

        遍历的顺序会基于对该对象调用 Object.keys() 的返回值来决定。如下所示:

data(){
  return {
    person:{
      name: "lucky",
      age: 18,
      address: "China"
    }
  }
}
<ul>
    <li v-for="(value, key, index) in person" :key="key">
        {{index}}: {{key}} - {{value}}
    </li>
</ul>

        运行效果为:

  • 0: name - lucky
  • 1: age - 18
  • 2: address - China

4.在v-for中使用范围值

        v-for 可以直接接受一个整数值。在这种用例中,会将该模板基于 1...n 的取值范围重复多次。

<span v-for="n in 6" :key="n">{{ n }}</span>

        运行效果为:

123456

5.在template上使用v-for

        <template> 标签上可以使用 v-for 来渲染一个包含多个元素的块

<ul>
    <template v-for="item in nums" :key="item">
        <li>{{item}}</li>
    </template>
</ul>

6.通过key管理状态

        Vue默认按照“就地更新”的策略来更新渲染元素列表,不会跟踪每个节点。当元素列表顺序改变时,Vue不会随之移动DOM元素的顺序,默认模式是高效的,但是只适用于渲染的元素列表不依赖子组件状态或者临时DOM状态(例如表单输入值)的情况。

        如下所示,未加key情况:

<script>
  export default{
    data(){
      return {
        nums: [1,2,3]
      }
    },
    methods:{
      insert(){
        //在数组首位插入数据0
        this.nums.unshift(0)
      }
    }
  }
</script>
<template>
  <div>
    <ul>
      <li v-for="item in nums">
        <input type="checkbox" />{{item}}
      </li>
    </ul>
    <button @click="insert">插入数据</button>
  </div>
</template>

        运行效果图如下所示,勾选数据2

        点击按钮插入数据后,效果图如下:

        可以看到,原本勾选的是2,新插入数据后,变成数字1被勾选了。

        修改代码,将key加上:

<li v-for="item in nums" :key="item">
    <input type="checkbox" />{{item}}
</li>

        再次运行,将数字2勾选,然后点击按钮插入数据,可以看到数字2保持被勾选:

         因此,推荐为v-for指令提供一个key。key绑定的值期望是一个基础类型的值,例如字符串或者number类型,不能使用对象作为key。

7.数组变化侦测

        Vue 能够侦听响应式数组的变更方法,并在它们被调用时触发相关的更新。变更方法如下:

push()在数组末尾添加元素
pop()删除数组末位的元素
shift()删除数组首位元素
unshift()在数组首位添加一个元素
splice()

表示删除元素、插入元素和替换远古三

第一个参数表示开始删除、插入或者替换元素的位置下标

删除元素:splice(参数1,参数2),

       参数2表示要删除几个元素,如果参数2不写的话,表示会删除后面的所有元素

插入元素:splice(参数1,0,参数3...)

        这里参数2传入0表示不删除元素(即插入元素),后面再跟要插入的数值       

替换元素:splice(参数1,参数2,参数3...)

        这里参数2填非0,表示要替换几个元素,后面跟要替换的数值

sort()排序数组,默认从小到大
reverse()翻转数组

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue3 中,你可以使用 `v-for` 指令来循环渲染列表,同时使用 `Array.sort()` 方法来对列表进行排序。 下面是一个基本的示例: 在模板中使用 `v-for` 指令来循环渲染列表,并使用 `Array.sort()` 方法对列表进行排序: ```html <template> <div> <h2>Students List:</h2> <ul> <li v-for="student in sortedStudents" :key="student.id"> {{ student.name }} - {{ student.score }} </li> </ul> </div> </template> <script> export default { data() { return { students: [ { id: 1, name: "Tom", score: 90 }, { id: 2, name: "Jerry", score: 80 }, { id: 3, name: "Alice", score: 95 }, { id: 4, name: "Bob", score: 85 }, ], }; }, computed: { // 使用 computed 属性来定义一个计算属性 sortedStudents // 在这个计算属性中,我们使用 Array.sort() 方法来按照分数(score)对学生列表进行排序 sortedStudents() { return this.students.sort((a, b) => { return b.score - a.score; }); }, }, }; </script> ``` 在上面的代码中,我们首先定义了一个包含学生信息的数据 `students`,然后使用 `computed` 属性来定义一个计算属性 `sortedStudents`,在这个计算属性中,我们使用 `Array.sort()` 方法来按照分数(`score`)对学生列表进行排序。最后,我们在模板中使用 `v-for` 指令来循环渲染排序后的学生列表。 注意事项: - 在 Vue3 中,计算属性的定义方式与 Vue2 有所不同。需要使用 `computed` 属性来定义计算属性。 - 使用 `v-for` 循环渲染列表时,需要为每个列表项指定一个唯一的 `key` 属性,以提高列表渲染性能。在上面的示例中,我们使用 `:key="student.id"` 来为每个列表项指定一个唯一的 `id`。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

luckyliuqs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值