vue 递归组件的两种方法

复制代码
app.vue
<template>
  <div>
    <list :data="data"></list>
    <hr/>
    <render :data="data"></render>
  </div>
</template>

<script>
import list from "./list.vue";
import render from "./render.vue";
export default {
  name: "App",
  components: {
    list,
    render
  },
  data() {
    return {
      data: [
        { id: 1, name: "1" },
        {
          id: 2,
          name: "2",
          children: [
            { id: 21, name: "21" ,children:[{ id: 211, name: "211" },{ id: 212, name: "212" }]},
            { id: 22, name: "22" }
          ],
        },
        {
          id: 3,
          name: "3",
          children: [
            { id: 31, name: "31" },
            { id: 32, name: "32" },
          ],
        },
        { id: 4, name: "4" },
        { id: 5, name: "5" },
      ],
    };
  },
};
</script>

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

list.vue
<template>
 <ul>
   <li v-for="item in data" :key="item.id">
     {{item.name}}
     <list v-if="item.children" :data="item.children"></list>
   </li>
 </ul>
</template>

<script>
  export default {
    name:'list',
    props:{
      data:{
        type:Array,
        default(){
          return []
        }
      }
    },
    
  }
</script>

<style lang="scss" scoped>

</style>


render.vue


<script>
export default {
  name: "Render",
  props: {
    data: {
      type: Array,
      default() {
        return [];
      },
    },
  },
  render(h) {
    let items = [];
    if (this.data.length) {
      items = this.data.map((item) => {
        if (item.children) { 
          return h("li", [
            item.name,
            h("Render", {
              props: {
                data: item.children,
              },
            }
            ),
          ]
          );
        } else {
          return h("li", item.name);
        }
      });
    }
    return h("ul", items);
  },
};
</script>

<style lang="scss" scoped>
</style>
复制代码

 

posted @   7c89  阅读(545)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
点击右上角即可分享
微信分享提示