vue遞歸組件

今天在閱讀vue文檔的時(shí)候,發(fā)現(xiàn)還有一個(gè)遞歸組件,平時(shí)沒有注意到。遞歸組件就是在自己組件的模板中調(diào)用自己,此時(shí)組件的name屬性就尤為重要了。
稍有不慎,遞歸組件就可能導(dǎo)致無限循環(huán),將會(huì)導(dǎo)致“max stack size exceeded”錯(cuò)誤,所以請(qǐng)確保遞歸調(diào)用是條件性的 (例如使用一個(gè)最終會(huì)得到 false 的 v-if)。
舉個(gè)例子:假如要將下列數(shù)據(jù)的name渲染出來,那么就可以使用遞歸組件完成

list: [
  {
    name: "海賊王",
    children: [
      {
        name: "卡普",
        children: [
          { 
            name: "龍", 
            children: [
              { 
                name: '路飛' 
              }
            ] 
          }
        ],
      },
     ],
   },
  ],

然后我們創(chuàng)建一個(gè)名為recursion.vue的組件

<template>
  <div>
    <div class="list" v-for="(item, index) in list" :key="index">
      <p>{{ item.name }}</p>
      /* 這是在組件的內(nèi)部,這個(gè)組件的名字必須與下面的name屬性的名字一致,首字母大小寫都可以 */
      <recursion :list="item.children"></recursion>
    </div>
  </div>
</template>
<script>
export default {
  name: "recursion",
  props: {
    list: Array,
  },
};
</script>

<style scoped>
.list{
  text-align: center;
}
</style>

然后使用組件,

<template>
  <div>
    <Recursion :list="list"></Recursion>
  </div>
</template>

<script>
// 這里導(dǎo)入的時(shí)候命名和recursion.vue內(nèi)部的name屬性是不沖突的,可以自由命名
import Recursion from "../components/recursion.vue";

export default {
  components: {
    Recursion,
  },
  data() {
    return {
      list: [
        {
          name: "海賊王",
          children: [
            {
              name: "卡普",
              children: [{ name: "龍", children: [{ name: '路飛' }] }],
            },
          ],
        },
      ],
    };
  },
};
</script>
遞歸組件.png

符合預(yù)期,控制無報(bào)錯(cuò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 在Vue中組件可以在模板內(nèi)部遞歸調(diào)用自己,需要給組件設(shè)置name值,需要注意的是:必須限定條件,不能無限遞歸,否則...
    圓夢(mèng)人生閱讀 1,496評(píng)論 2 0
  • vue 遞歸組件 前言 對(duì)于一些有規(guī)律的 dom 結(jié)構(gòu),我們可以通過遞歸方式來生成這個(gè)結(jié)構(gòu),,那么在 vue 的模...
    Fate0閱讀 18,739評(píng)論 1 13
  • 寫在前面 首先,本篇文章所開發(fā)的組件并非一個(gè)已經(jīng)開源的上線組件,所以如果你急于需要一個(gè)插件來只做你的項(xiàng)目,那么并不...
    馮陽陽的博客閱讀 5,969評(píng)論 1 30
  • 概念: 組件是可以在自己的模板中調(diào)用自身的,不過他們只能通過name選項(xiàng)來做這件事。 使用vue框架,我們會(huì)發(fā)現(xiàn)e...
    廊橋夢(mèng)醉閱讀 10,385評(píng)論 0 19
  • 其實(shí)最開始并沒有采用Vuex,因?yàn)閂uex相對(duì)于$emit這類事件監(jiān)聽需要多寫很多代碼,而且步驟也是比較繁瑣...
    馮陽陽的博客閱讀 25,754評(píng)論 6 14

友情鏈接更多精彩內(nèi)容