今天咱们继续使用 Vue 的撸咱们的实战项目,只有在实战中咱们才会领悟更多,光纸上谈兵然并卵,继上篇咱们的《Vue一个案例引起的动态组件与全局事件绑定总结》 以后,今天来聊一聊咱们如何在项目中使用递归组件。javascript
此次咱们主要是实现一个信息的分类展现列表存在二级/三级的分类,以下如所示:vue
看到这个不少人会想到这个实现起来很简单啊,来个嵌套循环不就完事了。java
对,你说的没错,事实就是这样简单。那么就先来看看这么简单的列表怎么实现的,而后这个方案的劣势在哪里。微信
首先看看咱们的数据格式ui
list: [{
name: "经济",
children: [{
name: "如家"
}, {
name: "7天"
}]
}, {
name: "温馨",
children: [{
name: "智选假日"
}, {
name: "全季"
}]
}]
基于上面的数据格式,咱们的实现方式以下:spa
<div class="list-item" v-for="(item, index) in list" :key="index">
<div class="item-name">
<span>{{item.name}}</span>
</div>
<div v-if="item.children" class="children-item">
<div v-for="(child, index) in item.children" :key="index">
<div class="item-name">
<span>{{child.name}}</span>
</div>
</div>
</div>
</div>
嗯,看上去很是完美,咱们的列表也很是好的展示出来,大功告成。code
但是忽然有一天我们的产品忽然跑过来讲,咱们的数据如今多加了一级分类,如今变成这样子了。component
list: [{
name: "经济",
children: [{
name: "如家",
children: [{
name: "长江路-如家"
}, {
name: "望江路-如家"
}]
}, {
name: "7天",
children: [{
name: "长江路-7天"
}, {
name: "望江路-7天"
}]
}]
}]
好吧,既然产品有需求数据有变化,那么咱们就改代码吧,因而咱们在原有的代码上继续加上一层嵌套循环,此次又总算完成了,可是可能没过两天咱们的数据又增长了一级分类怎么办?仍是继续嵌套下去?xml
有些同窗可能就会以为了,哪有这么多层级的数据展现,确定不会存在的,那只能说咱们太年轻,咱们不排除这种存在的可能,那若是咱们遇到这种状况怎么办?这里就要用到咱们说的 递归组件 了,不管你的数据怎么增长咱们都不用改动咱们的代码。blog
什么是递归组件?简单来讲就是在组件中内使用组件自己,下面咱们就来看看如何在项目中使用递归组件去解决咱们上面问题。
首先咱们先建立一个 List 的递归组件
<template>
<div>
<div class="list-item" v-for="(item, index) in list" :key="index">
<div class="item-name">
<span>{{item.name}}</span>
</div>
<div v-if="item.children" class="children-item">
<list :list="item.children"></list>
</div>
</div>
</div>
</template>
<script>
export default {
name: "List",
props: {
list: Array
}
};
</script>
注意上面的代码中咱们使用了 List 组件自己,完成这些以后,咱们在外部父级组件中使用 List 组件时,无论咱们的数据有多少层嵌套关系,均可以完美的自适应加载,咱们不再用经过嵌套嵌套在嵌套了。
<template>
<div class="list-detail">
<list :list="list"></list>
</div>
</template>
<script>
import List from "./components/List";
export default {
name: "Parent",
components: { List },
data() {
return {
list: [{
name: "经济",
children: [{
name: "如家",
children: [{
name: "上江路-如家"
},
{
name: "望江路-如家"
}]
},{
name: "7天",
children: [{
name: "长江路-7天"
},
{
name: "望江路-7天"
}]
}]
}]
}
}
}
</script>
最后咱们来看看渲染后的结果
如上就是咱们今天要说的递归组件,小伙伴们赶忙上手试试吧。
相似与信息分类的展现在咱们的项目中是很是常见的形式,咱们利用递归组件能够很好的去解决问题
文中若有不足之处,欢迎大神留言,拍砖!
关注个人微信公众号:六小登登,更多干货文章,欢迎一块儿交流。人人均可以成为高手。我是一个会技术,又写干货的码农。欢迎勾搭。