Vue——06循环遍历,Key属性以及数组更新

v-for遍历数组

当我们有一组数据需要进行渲染时,我们就可以使用v-for来完成。
v-for的语法类似于JavaScript中的for循环。
格式如下:item in items的形式。

一个简单的案例:

  • 如果在遍历的过程中不需要使用索引值
    v-for=“movie in movies”
    依次从movies中取出movie,并且在元素的内容中,我们可以使用Mustache语法,来使用movie
  • 如果在遍历的过程中,我们需要拿到元素在数组中的索引值呢?
    语法格式:v-for=(item, index) in items
    其中的index就代表了取出的item在原数组的索引值。
    在这里插入图片描述

v-for可以遍历对象:

比如某个对象中存储着你的个人信息,我们希望以列表的形式显示出来。
在这里插入图片描述

key属性

官方推荐我们在使用v-for时,给对应的元素或组件添加上一个:key属性。
为什么需要这个key属性呢(了解)?
这个其实和Vue的虚拟DOM的Diff算法有关系。
这里我们借用React’s diff algorithm中的一张图来简单说明一下:
当某一层有很多相同的节点时,也就是列表节点时,我们希望插入一个新的节点
我们希望可以在B和C之间加一个F,Diff算法默认执行起来是这样的。
即把C更新成F,D更新成C,E更新成D,最后再插入E,是不是很没有效率?
所以我们需要使用key来给每个节点做一个唯一标识
Diff算法就可以正确的识别此节点
找到正确的位置区插入新的节点。
所以一句话,key的作用主要是为了高效的更新虚拟DOM。
在这里插入图片描述
在这里插入图片描述

检测数组更新(响应式)

因为Vue是响应式的,所以当数据发生变化时,Vue会自动检测数据变化,视图会发生对应的更新。
Vue中包含了一组观察数组编译的方法,使用它们改变数组也会触发视图的更新。

  • push()添加元素(可以是多个元素)
    pop()删除最后一个元素
    shift()删除第一个元素
    unshift()数组最前面添加元素(可以是多个元素)
    splice()
    sort()排序
    reverse()翻转
    在这里插入图片描述在这里插入图片描述
    通过索引修改元素不是响应式的,如果需要响应式的可以使用splice或者set。
    在这里插入图片描述
### 实现 Vue.js 中组件的循环嵌套 在 Vue.js 中,通过 `v-for` 指令可以轻松实现列表渲染以及组件间的循环嵌套。下面展示了一个具体的例子,说明如何创建一个父级组件并在此基础上动态地渲染多个子组件。 #### 创建父子关系的组件结构 首先定义好要重复使用的子组件: ```vue <!-- ChildComponent.vue --> <template> <div class="child"> {{ childMessage }} </div> </template> <script> export default { props: ['childMessage'] } </script> ``` 接着,在父组件里引入这个子组件并通过 `v-for` 来遍历数组或对象集合从而达到循环效果: ```vue <!-- ParentComponent.vue --> <template> <div id="parent"> <!-- 使用 v-for 进行循环渲染 --> <ChildComponent v-for="(item, index) in items" :key="index" :child-message="item.message" /> </div> </template> <script> import ChildComponent from './ChildComponent.vue' export default { components: { ChildComponent }, data() { return { items: [ { message: '第一条消息' }, { message: '第二条消息' }, { message: '第三条消息' } ] } } } </script> ``` 上述代码展示了基本的循环机制[^1];需要注意的是当涉及到更复杂的场景比如无限层级树形菜单时,则可能需要用到递归组件的概念——即让某个组件能够调用自己本身形成多层嵌入的效果。 对于更加复杂的应用需求,还可以考虑利用 Vuex 或者其他状态管理模式来管理跨组件间的数据传递问题[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值