Vue 3.x 递归组件 复用自身

发布于 2024-06-05 05:29:57 字数 1384 浏览 19 评论 0

在父组件配置数据结构,数组对象格式,传给子组件

type TreeList = {
  name: string,
  icon?: string,
  chiildren?: TreeList[] | []
}

const data = reactive<TreeList[]>([
  {
    name: "no.1",
    children: [
      {
        name: "no.1-1",
        children: [
          {
            name: "no.1-1-1",
          },
        ],
      },
    ],
  },
  {
    name: "no.2",
    children: [
      {
        name: "no.2-1",
      },
    ],
  },
  {
    name: "no.3",
  },
]);

子组件接收值

TreeItem 其实就是当前组件,通过 import 把自身又引入了一遍(或者通过导出自身组件名),如果他没有 children 了就结束。

<template>
<div style="margin-left:10px;" class="tree">
  <div :key="index" v-for="(item,index) in data">
    <div @click.stop='clickItem(item)'>{{item.name}}
  </div>
    <TreeItem @on-click='clickItem' v-if='item?.children?.length' :data="item.children"></TreeItem>
  </div>
  </div>
</template>
<script lang="ts" setup>
  type TreeList = {
    name: string;
    icon?: string;
    children?: TreeList[] | [];
  };

  type Props<T> = {
    data?: T[] | [];
  };

  defineProps<Props<TreeList>>(); 
</script>
<script>
export default {
  name: "TreeItem" // 对外暴露一个 name
}
</script>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

几度春秋

暂无简介

0 文章
0 评论
22 人气
更多

推荐作者

qq_E2Iff7

文章 0 评论 0

Archangel

文章 0 评论 0

freedog

文章 0 评论 0

Hunk

文章 0 评论 0

18819270189

文章 0 评论 0

wenkai

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文