Vue一个案例引起的递归组件的使用

今天咱们继续使用 Vue 的撸咱们的实战项目,只有在实战中咱们才会领悟更多,光纸上谈兵然并卵,继上篇咱们的《Vue一个案例引起的动态组件与全局事件绑定总结》 以后,今天来聊一聊咱们如何在项目中使用递归组件。vue

信息的分类展现列表

此次咱们主要是实现一个信息的分类展现列表存在二级/三级的分类,以下如所示:微信

看到这个不少人会想到这个实现起来很简单啊,来个嵌套循环不就完事了。学习

对,你说的没错,事实就是这样简单。那么就先来看看这么简单的列表怎么实现的,而后这个方案的劣势在哪里。spa

首先看看咱们的数据格式code

list: [{
    name: "经济",
    children: [{
        name: "如家"
    }, {
        name: "7天"     
    }]
}, {
    name: "温馨",
    children: [{
        name: "智选假日"
    }, {
        name: "全季"     
    }]
}]

基于上面的数据格式,咱们的实现方式以下:component

<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>

嗯,看上去很是完美,咱们的列表也很是好的展示出来,大功告成。递归

但是忽然有一天我们的产品忽然跑过来讲,咱们的数据如今多加了一级分类,如今变成这样子了。事件

list: [{
    name: "经济",
    children: [{
        name: "如家",
        children: [{
            name: "长江路-如家"
        }, {
            name: "望江路-如家"     
        }]
    }, {
        name: "7天",
        children: [{
            name: "长江路-7天"
        }, {
            name: "望江路-7天"     
        }]
    }]
}]

好吧,既然产品有需求数据有变化,那么咱们就改代码吧,因而咱们在原有的代码上继续加上一层嵌套循环,此次又总算完成了,可是可能没过两天咱们的数据又增长了一级分类怎么办?仍是继续嵌套下去?ip

有些同窗可能就会以为了,哪有这么多层级的数据展现,确定不会存在的,那只能说咱们太年轻,咱们不排除这种存在的可能,那若是咱们遇到这种状况怎么办?这里就要用到咱们说的 递归组件 了,不管你的数据怎么增长咱们都不用改动咱们的代码。资源

递归组件

什么是递归组件?简单来讲就是在组件中内使用组件自己,下面咱们就来看看如何在项目中使用递归组件去解决咱们上面问题。

首先咱们先建立一个 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>

最后咱们来看看渲染后的结果

总结

如上就是咱们今天要说的递归组件,小伙伴们赶忙上手试试吧。

相似与信息分类的展现在咱们的项目中是很是常见的形式,咱们利用递归组件能够很好的去解决问题

关注微信公众号:六小登登。领取全套学习资源

相关文章
相关标签/搜索