返回顶部
首页 > 资讯 > 前端开发 > JavaScript >10分钟了解Vue3递归组件的用法
  • 831
分享到

10分钟了解Vue3递归组件的用法

2024-04-02 19:04:59 831人浏览 安东尼
摘要

目录前言用法讲解什么是递归?什么是递归组件?递归组件在哪会用到?上手实操1、创建组件2、全局注册组件3、获取导航数据4、设置递归边界,并渲染数据完整代码总结前言 在日常 Vue 项目

前言

在日常 Vue 项目中,大概率会用组件库辅助开发,所以 递归组件 的出镜率可能不会非常高。但这并不代表 递归组件 不重要。

本文用10分钟左右的时间让你掌握 递归组件 的用法。

在此之前,你必须掌握:html + CSS + js + vue3 基础用法,至少需要知道 Vue 组件 是什么。

用法讲解

在讲解 递归组件 之前,我们需要先了解几个概念。

什么是递归?

递归在百度百科里的定义是:

程序调用自身的编程技巧称为递归( recursion)

你可以将 递归 粗略的理解为 循环 ,只不过 递归 是调用自身。

在实际使用中,需要给递归设置一个边界条件,用该边界条件来判断是否继续递归下去。

如果不设置判断条件,将会导致 无限递归 ,也就是 死循环!

什么是递归组件?

看到这里,我相信大家是知道 Vue组件 是什么。

我先把 《Vue3 递归组件 文档》 放在这。

其实 递归组件 就是把 “递归” 和 “组件” 结合起来。

组件在边界条件内不断调用自己,直到超出边界条件为止。

递归组件在哪会用到?

在我工作中会出现递归组件的情况有:

  • “树”组件:用来展示文件层级的。
  • 左侧导航栏:根据路由层级生成的导航菜单。
  • 多级表格(嵌套的表格)。

上手实操

经过前面的讲解,相信大家对 递归组件 已经有一定的概念了。

接下来通过一个简单的例子来讲解。

上图就是本次要实现的例子。

我没有写样式,大家将就一下,用想象力把这想象成网站的左侧导航栏吧。

这种导航栏,有在前端写死的;也有写业务是需要后端配置,前端把导航栏数据请求回来再生成路由的。

所以可以理解为前端一开始不知道这个导航有多少层级。

这时就可以通过 递归组件 的方式来实现。

步骤如下:

  • 创建导航组件
  • 全局注册导航组件
  • 获取数据(本例以学习为目的,所以在前端写死数据)
  • 在导航组件中设置递归边界,并渲染数据

1、创建组件

我给导航组件命名为 RootNav.vue 。并将它放在 components 目录下。

RootNav.vue

<template>
  <div>
    Rootnav
  </div>
</template>

<script setup>
</script>

<style lang="scss" scoped>
</style>

此时项目目录如下:

省略部分目录和文件

- src
|- main.js
|- App.vue
|- components
   |- RootNav.vue

2、全局注册组件

我在全局注册 RootNav.vue 组件,这样就方便 RootNav.vue 自己调用自己了。

main.js

import { createApp } from 'vue'
import App from './App.vue'
import RootNav from './components/RootNav.vue' // 引入 RootNav 组件

const app = createApp(App)
app.component('RootNav', RootNav) // 将 RootNav 注册成全局组件
app.mount('#app')

在 App.vue 中使用

App.vue

<template>
  <div>
    <RootNav />
  </div>
</template>

此时浏览器的界面如上图所示。

3、获取导航数据

在真实项目中,左侧导航可能是从后端获取的。

但本文的目的是学习递归组件,所以就直接在前端模拟了一份 “请求回来的数据”。

我把 “请求数据” 的操作放在 App.vue 。然后再通过 props 的方式传入到 RootNav.vue 组件内。

讲到 props 我就顺便提一下:《Vue3 过10种组件通讯方式》

App.vue

<template>
  <div>
    <RootNav :list="navList" />
  </div>
</template>

<script setup>
const navList = [
  {
    name: '一级导航 1'
  },
  {
    name: '一级导航 2',
    children: [
      { name: '二级导航 2-1' },
      {
        name: '二级导航 2-2',
        children: [
          { name: '三级导航 2-2-1' },
          { name: '三级导航 2-2-2' },
        ]
      },
      { name: '二级导航 2-2' }
    ]
  },
  {
    name: '一级导航 3'
  }
]
</script>

RootNav.vue

<template>
  <div>
    RootNav    
  </div>
</template>

<script setup>
const props = defineProps({
  list: {
    type: Array,
    default: () => []
  }
})
</script>

此时在 RootNav.vue 里就接收到 “请求回来的导航数据” 了。

4、设置递归边界,并渲染数据

我们看到导航数据有 children 字段,这个字段是 “子菜单” 的意思。

我们可以通过是否存在 children 字段来判断是否需要继续递归。也就是说,children 就是递归的边界条件。

RootNav.vue

<template>
  <ul>
    <template v-for="item in list">
      <li>{{ item.name }}</li>
      <RootNav v-if="'children' in item" :list="item.children" />
    </template>
  </ul>
</template>

<script setup>
const props = defineProps({
  list: {
    type: Array,
    default: () => []
  }
})
</script>

这部分的重点在 HTML 代码里。

到这就完成了最开始的目标了。

完整代码

main.js

import { createApp } from 'vue'
import App from './App.vue'
import RootNav from './components/RootNav.vue'

const app = createApp(App)
app.component('RootNav', RootNav)
app.mount('#app')

App.vue

<template>
  <div>
    <RootNav :list="navList" />
  </div>
</template>

<script setup>
const navList = [
  {
    name: '一级导航 1'
  },
  {
    name: '一级导航 2',
    children: [
      { name: '二级导航 2-1' },
      {
        name: '二级导航 2-2',
        children: [
          { name: '三级导航 2-2-1' },
          { name: '三级导航 2-2-2' },
        ]
      },
      { name: '二级导航 2-2' }
    ]
  },
  {
    name: '一级导航 3'
  }
]
</script>

components/RootNav.vue

<template>
  <ul>
    <template v-for="item in list">
      <li>{{ item.name }}</li>
      <RootNav v-if="'children' in item" :list="item.children" />
    </template>
  </ul>
</template>

<script setup>
const props = defineProps({
  list: {
    type: Array,
    default: () => []
  }
})
</script>

总结

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

--结束END--

本文标题: 10分钟了解Vue3递归组件的用法

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

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

猜你喜欢
  • 10分钟了解Vue3递归组件的用法
    目录前言用法讲解什么是递归?什么是递归组件?递归组件在哪会用到?上手实操1、创建组件2、全局注册组件3、获取导航数据4、设置递归边界,并渲染数据完整代码总结前言 在日常 Vue 项目...
    99+
    2024-04-02
  • vue3递归组件封装的全过程记录
    目录前言1、递归组件2、右键菜单组件总结前言 今天在写项目时,遇到一个自定义右键菜单的需求。在菜单中还有子菜单,所以这个时候就要用到递归组件了。所以写下这篇文章来记录一下自己编写递归...
    99+
    2024-04-02
  • VUE3+TS递归组件实现TreeList设计实例详解
    目录前言功能分析数据结构实现方式插件式开发插件如何注册插件需要设计那些事件插槽内容插件需要传入那些值支持拖拽功能draggable拖拽相关事件dragStartdragOverdra...
    99+
    2024-04-02
  • C++ 函数递归详解:分治法中的递归应用
    递归是一种函数自我调用的技术,适用于可分解成较小规模子问题的问题。分治法采用递归将问题分解成独立子问题,逐步解决。如 findmaximum() 函数递归查找数组中最大值,通过检查基本情...
    99+
    2024-05-03
    c++ 递归
  • Vue3+TypeScript实现递归菜单组件的完整实例
    目录前言 需求 实现 首次渲染 点击菜单项 样式区分 默认高亮 数据源变动引发的 bug 完整代码 App.vue 总结 前言 小伙伴们好久不见,最近刚入职新公司,需求排的很满,平...
    99+
    2024-04-02
  • Vue递归组件使用技巧实例代码分析
    这篇文章主要介绍“Vue递归组件使用技巧实例代码分析”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Vue递归组件使用技巧实例代码分析”文章能帮助大家解决问题。痛点引出在平时的开发当中,渲染侧边栏导航...
    99+
    2023-07-05
  • java迷宫算法的理解(递归分割,递归回溯,深搜,广搜)
    目录递归分割法:递归回溯法:广度优先深度优先:下面是递归分割法、递归回溯法以及文件加载地图实现的类map最近这学期做了一个java迷宫的课程设计,这里代码及其算法逻辑就分享出来。 首...
    99+
    2024-04-02
  • 基于Vue技术实现递归组件的方法
    描述 本文介绍的是基于Vue技术实现递归组件的方法。用Vue实现一级列表、二级列表的展示很简单,但是想要实现无限级,光是套上一个又一个的v-for是行不通的,这个时候就需要用到递归的...
    99+
    2024-04-02
  • java词法分析器DDL递归应用详解
    目录前言intellij plugin词法解析状态迁移DDL 解析递归解析总结前言 最近大部分时间都在撸Python,其中也会涉及到将数据库表转换为Python中ORM框架的Mode...
    99+
    2024-04-02
  • TOP命令参数详解---10分钟学会top用法
    TOP命令详解 一、top命令介绍   相信每个运维人员都遇到过的事情就是服务器的负载突然飙升,碰到这种情况,大家第一反应一定是登到服务器上,先敲一个top命令看看load average吧。在Linux操作系统中,top是使用最频繁,也是...
    99+
    2023-08-20
    服务器 linux 运维
  • Vue中组件递归的方法及使用问题有哪些
    本篇内容介绍了“Vue中组件递归的方法及使用问题有哪些”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!第一个问题就是,循环表单;看下图然后这里...
    99+
    2023-06-29
  • Java开发深入分析讲解二叉树的递归和非递归遍历方法
    目录前言1.递归遍历2.非迭代遍历3.二叉树的统一迭代法前言 二叉树的遍历方法分为前序遍历,中序遍历,后续遍历,层序遍历。 1.递归遍历 对于递归,就不得不说递归三要素:以前序遍历...
    99+
    2024-04-02
  • 如何进行C#递归算法理解的分析
    如何进行C#递归算法理解的分析,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。C#递归算法的理解并不是紧紧感觉很好用,那么C#递归算法的使用是要用递归的思路去解决...
    99+
    2023-06-17
  • 全面分析Java方法的使用与递归
    目录java中方法的使用什么是方法方法的定义与使用方法如何进行调用及其方法调用过程方法的形参和实参方法重载方法签名递归java中方法的使用 什么是方法 举一个日常生活中的例子,比如我...
    99+
    2024-04-02
  • Vue一个案例引发的递归组件怎么用
    这篇文章主要介绍Vue一个案例引发的递归组件怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!信息的分类展示列表这次我们主要是实现一个信息的分类展示列表存在二级/三级的分类,如下如...
    99+
    2024-04-02
  • Vue3异步组件Suspense的使用方法详解
    Suspense组件 官网中有提到他是属于实验性功能:<Suspense> 是一项实验性功能。它不一定会最终成为稳定功能,并且在稳定之前相关 API 也可能会发...
    99+
    2023-01-28
    Vue3异步组件 Vue3异步组件Suspense的使用方法
  • Vue2和Vue3中常用组件通信用法分享
    目录Vue3 组件通信方式Vue3 通信使用写法1. props2. $emit3. expose / ref4. attrs5. v-model6. provide / injec...
    99+
    2023-05-15
    Vue2组件通信 Vue3组件通信 Vue组件通信
  • Javascript迭代、递推、穷举、递归常用算法的示例分析
    小编给大家分享一下Javascript迭代、递推、穷举、递归常用算法的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!累加和累积累加:将一系列的数据加到一个变量里面。最后的得到累加的...
    99+
    2024-04-02
  • C++ 递归函数在分治算法中的应用?
    分治算法将大问题分解成较小子问题,c++++递归函数可实现分治算法:选择基准元素;分割数组为基准元素两侧;递归排序两部分;合并已排序部分。 C++ 递归函数在分治算法中的应用 分治算法...
    99+
    2024-04-19
    c++ 递归函数 分治算法
  • Vue3内置组件Teleport使用方法详解
    目录1、Teleport用法2、完成模态对话框组件3、组件的渲染前言: Vue 3.0 新增了一个内置组件 teleport ,主要是为了解决以下场景: 有时组件模板的一部分逻辑上属...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作