最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

10分鐘了解Vue3遞歸組件的用法

 更新時(shí)間:2022年03月09日 10:20:39   作者:德育處主任  
遞歸?簡(jiǎn)單來(lái)講就是程序自己調(diào)用自身,vue中的遞歸組件就是,組件自身調(diào)用自身,下面這篇文章主要給大家介紹了關(guān)于Vue3遞歸組件的用法,需要的朋友可以參考下

前言

在日常 Vue 項(xiàng)目中,大概率會(huì)用組件庫(kù)輔助開(kāi)發(fā),所以 遞歸組件 的出鏡率可能不會(huì)非常高。但這并不代表 遞歸組件 不重要。

本文用10分鐘左右的時(shí)間讓你掌握 遞歸組件 的用法。

在此之前,你必須掌握:html + css + js + Vue3 基礎(chǔ)用法,至少需要知道 Vue 組件 是什么。

用法講解

在講解 遞歸組件 之前,我們需要先了解幾個(gè)概念。

什么是遞歸?

遞歸在百度百科里的定義是:

程序調(diào)用自身的編程技巧稱為遞歸( recursion)

你可以將 遞歸 粗略的理解為 循環(huán) ,只不過(guò) 遞歸 是調(diào)用自身。

在實(shí)際使用中,需要給遞歸設(shè)置一個(gè)邊界條件,用該邊界條件來(lái)判斷是否繼續(xù)遞歸下去。

如果不設(shè)置判斷條件,將會(huì)導(dǎo)致 無(wú)限遞歸 ,也就是 死循環(huán)!

什么是遞歸組件?

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

我先把 《Vue3 遞歸組件 文檔》 放在這。

其實(shí) 遞歸組件 就是把 “遞歸” 和 “組件” 結(jié)合起來(lái)。

組件在邊界條件內(nèi)不斷調(diào)用自己,直到超出邊界條件為止。

遞歸組件在哪會(huì)用到?

在我工作中會(huì)出現(xiàn)遞歸組件的情況有:

  • “樹(shù)”組件:用來(lái)展示文件層級(jí)的。
  • 左側(cè)導(dǎo)航欄:根據(jù)路由層級(jí)生成的導(dǎo)航菜單。
  • 多級(jí)表格(嵌套的表格)。

上手實(shí)操

經(jīng)過(guò)前面的講解,相信大家對(duì) 遞歸組件 已經(jīng)有一定的概念了。

接下來(lái)通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)講解。

上圖就是本次要實(shí)現(xiàn)的例子。

我沒(méi)有寫樣式,大家將就一下,用想象力把這想象成網(wǎng)站的左側(cè)導(dǎo)航欄吧。

這種導(dǎo)航欄,有在前端寫死的;也有寫業(yè)務(wù)是需要后端配置,前端把導(dǎo)航欄數(shù)據(jù)請(qǐng)求回來(lái)再生成路由的。

所以可以理解為前端一開(kāi)始不知道這個(gè)導(dǎo)航有多少層級(jí)。

這時(shí)就可以通過(guò) 遞歸組件 的方式來(lái)實(shí)現(xiàn)。

步驟如下:

  • 創(chuàng)建導(dǎo)航組件
  • 全局注冊(cè)導(dǎo)航組件
  • 獲取數(shù)據(jù)(本例以學(xué)習(xí)為目的,所以在前端寫死數(shù)據(jù))
  • 在導(dǎo)航組件中設(shè)置遞歸邊界,并渲染數(shù)據(jù)

1、創(chuàng)建組件

我給導(dǎo)航組件命名為 RootNav.vue 。并將它放在 components 目錄下。

RootNav.vue

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

<script setup>
</script>

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

此時(shí)項(xiàng)目目錄如下:

省略部分目錄和文件

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

2、全局注冊(cè)組件

我在全局注冊(cè) RootNav.vue 組件,這樣就方便 RootNav.vue 自己調(diào)用自己了。

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 注冊(cè)成全局組件
app.mount('#app')

在 App.vue 中使用

App.vue

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

此時(shí)瀏覽器的界面如上圖所示。

3、獲取導(dǎo)航數(shù)據(jù)

在真實(shí)項(xiàng)目中,左側(cè)導(dǎo)航可能是從后端獲取的。

但本文的目的是學(xué)習(xí)遞歸組件,所以就直接在前端模擬了一份 “請(qǐng)求回來(lái)的數(shù)據(jù)”。

我把 “請(qǐng)求數(shù)據(jù)” 的操作放在 App.vue 。然后再通過(guò) props 的方式傳入到 RootNav.vue 組件內(nèi)。

講到 props 我就順便提一下:《Vue3 過(guò)10種組件通訊方式》

App.vue

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

<script setup>
const navList = [
  {
    name: '一級(jí)導(dǎo)航 1'
  },
  {
    name: '一級(jí)導(dǎo)航 2',
    children: [
      { name: '二級(jí)導(dǎo)航 2-1' },
      {
        name: '二級(jí)導(dǎo)航 2-2',
        children: [
          { name: '三級(jí)導(dǎo)航 2-2-1' },
          { name: '三級(jí)導(dǎo)航 2-2-2' },
        ]
      },
      { name: '二級(jí)導(dǎo)航 2-2' }
    ]
  },
  {
    name: '一級(jí)導(dǎo)航 3'
  }
]
</script>

RootNav.vue

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

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

此時(shí)在 RootNav.vue 里就接收到 “請(qǐng)求回來(lái)的導(dǎo)航數(shù)據(jù)” 了。

4、設(shè)置遞歸邊界,并渲染數(shù)據(jù)

我們看到導(dǎo)航數(shù)據(jù)有 children 字段,這個(gè)字段是 “子菜單” 的意思。

我們可以通過(guò)是否存在 children 字段來(lái)判斷是否需要繼續(xù)遞歸。也就是說(shuō),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>

這部分的重點(diǎn)在 HTML 代碼里。

到這就完成了最開(kāi)始的目標(biāo)了。

完整代碼

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: '一級(jí)導(dǎo)航 1'
  },
  {
    name: '一級(jí)導(dǎo)航 2',
    children: [
      { name: '二級(jí)導(dǎo)航 2-1' },
      {
        name: '二級(jí)導(dǎo)航 2-2',
        children: [
          { name: '三級(jí)導(dǎo)航 2-2-1' },
          { name: '三級(jí)導(dǎo)航 2-2-2' },
        ]
      },
      { name: '二級(jí)導(dǎo)航 2-2' }
    ]
  },
  {
    name: '一級(jí)導(dǎo)航 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>

總結(jié)

到此這篇關(guān)于Vue3遞歸組件的用法的文章就介紹到這了,更多相關(guān)Vue3遞歸組件用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Vue在頁(yè)面數(shù)據(jù)渲染完成之后的調(diào)用方法

    Vue在頁(yè)面數(shù)據(jù)渲染完成之后的調(diào)用方法

    今天小編就為大家分享一篇Vue在頁(yè)面數(shù)據(jù)渲染完成之后的調(diào)用方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-09-09
  • vue全局過(guò)濾器概念及注意事項(xiàng)和基本使用方法

    vue全局過(guò)濾器概念及注意事項(xiàng)和基本使用方法

    這篇文章主要給大家分享了vue全局過(guò)濾器概念及注意事項(xiàng)和基本使用方法,下面文字圍繞vue全局過(guò)濾器的相關(guān)資料展開(kāi)具體的詳細(xì)內(nèi)容,需要的朋友可以參考一下,希望對(duì)你有所幫助
    2021-11-11
  • Vue中輸入框僅支持?jǐn)?shù)字輸入的四種方法

    Vue中輸入框僅支持?jǐn)?shù)字輸入的四種方法

    項(xiàng)目中需要用到大量的數(shù)字輸入框限制,為了可以以后能又更多的拓展性,下面這篇文章主要給大家介紹了關(guān)于Vue中輸入框僅支持?jǐn)?shù)字輸入的四種方法,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • Vue中$set()的使用方法場(chǎng)景分析

    Vue中$set()的使用方法場(chǎng)景分析

    由于 Vue 會(huì)在初始化實(shí)例時(shí)進(jìn)行雙向數(shù)據(jù)綁定,使用Object.defineProperty()對(duì)屬性遍歷添加 getter/setter 方法,所以屬性必須在 data 對(duì)象上存在時(shí)才能進(jìn)行上述過(guò)程 ,這樣才能讓它是響應(yīng)的,這篇文章主要介紹了Vue中$set()的使用方法場(chǎng)景分析,需要的朋友可以參考下
    2023-02-02
  • vue中路由跳轉(zhuǎn)不計(jì)入history的操作

    vue中路由跳轉(zhuǎn)不計(jì)入history的操作

    這篇文章主要介紹了vue中路由跳轉(zhuǎn)不計(jì)入history的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-09-09
  • Vue中computed與methods的區(qū)別詳解

    Vue中computed與methods的區(qū)別詳解

    這篇文章主要介紹了Vue中computed與methods的區(qū)別詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-03-03
  • 解決vue.js中settimeout遇到的問(wèn)題(時(shí)間參數(shù)短效果不穩(wěn)定)

    解決vue.js中settimeout遇到的問(wèn)題(時(shí)間參數(shù)短效果不穩(wěn)定)

    這篇文章主要介紹了解決vue.js中settimeout遇到的問(wèn)題(時(shí)間參數(shù)短效果不穩(wěn)定),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-07-07
  • 解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問(wèn)題

    解決Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問(wèn)題

    這篇文章主要介紹了Vue.js應(yīng)用回退或刷新界面時(shí)提示用戶保存修改問(wèn)題,本文通過(guò)兩種手段防止運(yùn)營(yíng)編輯時(shí)丟失數(shù)據(jù),具體內(nèi)容詳情,感興趣的朋友跟隨小編一起看看吧
    2019-11-11
  • 解決Vue運(yùn)行項(xiàng)目報(bào)錯(cuò)proxy?error:?could?not?proxy?request

    解決Vue運(yùn)行項(xiàng)目報(bào)錯(cuò)proxy?error:?could?not?proxy?request

    這篇文章主要給大家介紹了關(guān)于如何解決Vue運(yùn)行項(xiàng)目報(bào)錯(cuò)proxy?error:could?not?proxy?request的相關(guān)資料,Proxy Error指的是代理服務(wù)器無(wú)法正確處理請(qǐng)求的錯(cuò)誤,需要的朋友可以參考下
    2023-08-08
  • Vue 子組件與數(shù)據(jù)傳遞問(wèn)題及注意事項(xiàng)

    Vue 子組件與數(shù)據(jù)傳遞問(wèn)題及注意事項(xiàng)

    這篇文章主要介紹了Vue子組件與數(shù)據(jù)傳遞問(wèn)題及需要注意事項(xiàng),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07

最新評(píng)論

米泉市| 当涂县| 全椒县| 桐城市| 射洪县| 壤塘县| 沙田区| 双辽市| 郯城县| 南安市| 滨海县| 景宁| 余姚市| 宣城市| 阿巴嘎旗| 石楼县| 南和县| 江门市| 汾阳市| 宜州市| 友谊县| 福泉市| 尼木县| 泰安市| 静宁县| 泌阳县| 揭阳市| 油尖旺区| 界首市| 荣成市| 石阡县| 库车县| 玉溪市| 苗栗县| 海宁市| 郴州市| 澄江县| 新营市| 东乡县| 五河县| 富锦市|