广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue实现递归组件的思路与示例代码
  • 833
分享到

Vue实现递归组件的思路与示例代码

2024-04-02 19:04:59 833人浏览 八月长安
摘要

目录前言一、递归组件是什么?二、Vue实现递归的核心思路三、代码示例1.父级2.子级3、实现效果补充:递归组件的应用场景总结前言 在我们开发过程中,为了提高开发效率,降低开发难度,我

前言

在我们开发过程中,为了提高开发效率,降低开发难度,我们会直接使用组件库来实现,同时也衍生出了很多优秀的组件库,如:饿了么、蚂蚁、Iview、vant等等。但是有时这些组件库提供给我们的组件不满足我们的需求或者定制组件时成本太高,那么我们就要手动实现了。

一、递归组件是什么?

字面理解为层层递进最后归并到一起,它的特点就是层级分明。

例如饿了么组件库的树组件就是一个递归。

二、Vue实现递归的核心思路

1、循环出一级类别

2、判断如果有多级,再调用自身。

三、代码示例

1.父级

代码如下(示例):

<template>
  <div>
    <!-- 递归组件 -->
    <Recursion :list="list" />  list为获取数据,传入子页面
  </div>
</template>

<script>
import Recursion from "./recursion.vue";

export default {
  name: "index-Recursion",
  components: {
    Recursion,
  },
};
</script>

2.子级

代码如下(示例):

<template>
  <div>
    <div class="item">
      <div>
          <ul>
            <li v-for="(l, id) of list" :key="id">
              {{ l.name }}
              <ul style="padding-left: 20px" v-if="l.chidren"> // 核心代码1
                <li>
                    <index-chird :list="l.chidren" /> // 核心代码2
                </li>
              </ul>
            </li>
          </ul>
        </div>
    </div>
  </div>
</template>

<script>
export default {
  name: "index-chird", // 自身组件
  props: {
    list: Array,
  },
  data() {
    return {
      list: [],
    };
  },

  watch: {
    list(newData) {
      this.list = newData;
    },
  },
  
};
</script>

<style  scoped>
.item {
  margin: 0 auto;
}
</style>

此处使用监听器监听数据变化,如果正常发请求传递数据不需要监听,如果报出没有拿到数据的错误可使用监听器。

3、实现效果

补充:递归组件的应用场景

除了上述的树形视图外,评论也是一个不错的应用场景,比如网易新闻的评论回复功能。或者一个包含父任务和多级子任务的todolist,总之,递归组件适合那些在UI上有父子关系的场景。

写一个递归组件

其实,有一点也是在实现递归组件要注意的,就是要防止无限递归,造成调用栈溢出。上面说的子子孙孙,无穷尽也,说说可以,可是浏览器受不了啊。这就要根据实际场景来分析递归的终止条件。接下来,我们来写一个递归组件。

上面的demo实现了一个模拟dom事件冒泡的操作,当点击中心圆时,事件逐级传递,然后改变div的颜色,直到冒泡到最顶层。这里根据设置圆的数量进行递归,递归的终止条件是直到数量减到1:

<template>
...
    <colorful-circle 
         v-if="count > 1" // 控制递归条件
         :count="count - 1" // 每向下一层,count减1
         @colorChange="handleColor" 
    ></colorful-circle>
...
</template>

递归组件在事件监听上也是一个有意思的地方,你可以一层一层接力,直到将事件冒泡到最顶层。代码片段如下:

<template>
...
    <colorful-circle 
         v-if="count > 1" 
         :count="count - 1"
         @colorChange="handleColor" // 监听子colorful-circle组件发出的事件
    ></colorful-circle>
...
</template>
 
<script>
name: 'colorful-circle',
...
methods: {
...
    handleColor(c) {
      this.color = Color(c).darkenByAmount( .05 ); // 在本层组件改变颜色
      setTimeout(() => {
        this.$emit('colorChange', this.color); // 把事件再冒泡到上一层组件
      },100)
    },
}
...
</script>

总结

很简单的一个demo,重点是我们是否了解Vue每个组件定义的name的真正用途是什么。每个组件的name值其实也是为了帮助我们实现递归的。

代码逻辑也很简单,重点在我的子组件。但父组件传过来的树形数据结构到子组件后,我们需要拿到数据并做遍历,然后再下一行加入核心逻辑:if 发现我们有子数据,那么我们直接调用自身组件,也就是直接使用name值做组件声明。最关键的是要把子数据结构再传入我们自身组件,那么我们就成功的实现了数据的层层遍历。

当然,这块儿的子数据结构字段我这里叫chirden,一般企业开发是后台给我们的,他们也可以叫A,叫B,我们需要根据自己的数据字段情况,去做相应的修改。

到此这篇关于Vue实现递归组件的文章就介绍到这了,更多相关Vue实现递归组件内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: Vue实现递归组件的思路与示例代码

本文链接: https://www.lsjlt.com/news/166958.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue实现递归组件的思路与示例代码
    目录前言一、递归组件是什么?二、Vue实现递归的核心思路三、代码示例1.父级2.子级3、实现效果补充:递归组件的应用场景总结前言 在我们开发过程中,为了提高开发效率,降低开发难度,我...
    99+
    2022-11-13
  • Vue递归组件使用技巧实例代码分析
    这篇文章主要介绍“Vue递归组件使用技巧实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue递归组件使用技巧实例代码分析”文章能帮助大家解决问题。痛点引出在平时的开发当中,渲染侧边栏导航...
    99+
    2023-07-05
  • C#实现FFT(递归法)的示例代码
    目录1. C#实现复数类2. 递归法实现FFT3. 补充:窗函数1. C#实现复数类 我们在进行信号分析的时候,难免会使用到复数。但是遗憾的是,C#没有自带的复数类,以下提供了一种复...
    99+
    2022-11-13
  • Java实现二叉树的示例代码(递归&迭代)
    目录1.二叉树基本概念见上节:详解Java中二叉树的基础概念(递归&迭代) 2.本次展示链式存储 以此图为例,完整代码如下: //基础二叉树实现 //使用左右孩子表示法 ...
    99+
    2022-11-13
  • Vue结合Element-Plus封装递归组件实现目录示例
    目录前言用正则匹配出所有的h标签并且保存在数组中封装函数,将数组中的内容变成父子结构封装递归组件fold-item(在使用之前不要忘了导入自己哦)在foldMenu中使用递归组件使用...
    99+
    2022-11-13
  • el-menu递归实现多级菜单组件的示例
    目录1. 效果:2. 实现:3. 使用组件:1. 效果: 2. 实现: 创建外层菜单AsideMenu.vue组件和子菜单项AsideSubMenu.vue组件,在AsideS...
    99+
    2023-05-15
    el-menu多级菜单 el-menu递归菜单
  • Android 使用Intent传递数据的实现思路与代码
    Intent是Android中一个非常重要的概念,跟这个词的本意(意图,目的)一样,这个类在Android中的作用就是要调用某个组建去做某一件事,比如通过startActivi...
    99+
    2022-06-06
    数据 intent Android
  • java栈实现二叉树的非递归遍历的示例代码
    一般来说遍历二叉树用到递归,但是用Stack进行遍历也是一个不错的方法。 二叉树设置 class Node{ public int val; public Node left...
    99+
    2022-11-11
  • react实现Radio组件的示例代码
    本文旨在用最清楚的结构去实现一些组件的基本功能。希望和大家一起学习,共同进步 效果展示: 测试组件: class Test extends Component { cons...
    99+
    2022-11-12
  • Vue简易版无限加载组件实现原理与示例代码
    目录背景实现功能Props使用组件实现scroll 事件$emit 发射事件和 props 回调函数的区别总结背景 遇到的两个问题:scroll 事件不触发、如何将 loading ...
    99+
    2022-11-13
  • vue elementui 实现搜索栏子组件封装的示例代码
    目录前言需求实现子组件(search.vue)父组件部分主要代码(index.vue)前言 描述: 在基本项目中搜索栏、分页组件格式样式几乎是固定的,只是对应的数据不同,由于模块会随...
    99+
    2022-11-13
  • uniapp vue与nvue轮播图之轮播图组件的示例代码
    vue部分如下: <template> <view class=""> <!-- 轮播图组件 --> <swiper :ind...
    99+
    2022-11-12
  • Vue+NodeJS实现大文件上传的示例代码
    目录整体思路项目演示前端界面文件切片hash计算查询切片状态切片上传(断点续传)文件总体上传进度合并文件优化请求并发数控制hash值计算优化常见的文件上传方式可能就是new一个For...
    99+
    2022-11-13
  • 基于Vue3实现日历组件的示例代码
    以下是一个基于 Vue 3 实现的简单日历组件的代码示例。这个日历组件包含了前一个月、当前月、下一个月的日期,并且可以支持选择日期、切换月份等功能。 <template>...
    99+
    2023-05-17
    Vue3实现日历组件 Vue3日历组件 Vue3日历 Vue 日历
  • react实现组件状态缓存的示例代码
    目录前言一、安装第三方库二、配置操作总结前言 在移动端中,用户访问了一个列表页,上拉浏览列表页的过程中,随着滚动高度逐渐增加,数据也将采用触底分页加载的形式逐步增加,列表页浏览到某个...
    99+
    2023-02-24
    react 组件状态缓存 react 组件缓存
  • AndroidFlutter实现上拉加载组件的示例代码
    前言 在此之前对列表下拉刷新做了调整方案,具体介绍可以阅读下拉刷新组件交互调整。既然列表有下拉刷新外当然还有上拉加载更多操作了,本次就来介绍如何为列表增加上拉加载更多的交互实现。 实...
    99+
    2022-11-13
  • Mysql 实现向上递归查找父节点并返回树结构的示例代码
    通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构。如果只有叶子,剔除掉; 如果只有根,只显示一个秃顶的根 ;如果既有...
    99+
    2022-09-12
  • Mysql实现向上递归查找父节点并返回树结构的示例代码
    通过mysql 8.0以下版本实现,一个人多角色id,一个角色对应某个节点menu_id,根节点的父节点存储为NULL, 向上递归查找父节点并返回树结构。如果只有叶子,剔除掉; 如果...
    99+
    2022-11-13
  • vue实现在线预览office文件的示例代码
    最近在做电子档案,后端提供了文件的华为云的oss链接。已经实现了点击下载文件的功能。但是呢,他们又希望常规的文件,可以直接点击预览,不需要下载。 按道理说,做文件的在线预览,买个第三...
    99+
    2022-11-12
  • 使用Vue3实现一个Upload组件的示例代码
    目录通用上传组件开发我们需要实现如下功能自定义模版支持文件上传列表支持一系列生命周期钩子事件,上传事件拖拽支持写在最后通用上传组件开发 开发上传组件前我们需要了解: Fo...
    99+
    2022-11-12
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作