From 6b62edc3232b1b0a8f70572f10363374c46fd5e0 Mon Sep 17 00:00:00 2001
From: pany <939630029@qq.com>
Date: Mon, 28 Aug 2023 19:12:35 +0800
Subject: [PATCH] =?UTF-8?q?perf:=20=E4=BC=98=E5=8C=96=20CompConsumer=20?=
=?UTF-8?q?=E4=BB=A3=E7=A0=81?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
src/layouts/components/AppMain.vue | 3 ++
.../components/CompConsumer/index.ts} | 30 +++++++++----------
2 files changed, 17 insertions(+), 16 deletions(-)
rename src/{layout/components/comp-consumer.ts => layouts/components/CompConsumer/index.ts} (58%)
diff --git a/src/layouts/components/AppMain.vue b/src/layouts/components/AppMain.vue
index 15500823..dbe8980f 100644
--- a/src/layouts/components/AppMain.vue
+++ b/src/layouts/components/AppMain.vue
@@ -1,5 +1,7 @@
@@ -12,6 +14,7 @@ const tagsViewStore = useTagsViewStore()
+
diff --git a/src/layout/components/comp-consumer.ts b/src/layouts/components/CompConsumer/index.ts
similarity index 58%
rename from src/layout/components/comp-consumer.ts
rename to src/layouts/components/CompConsumer/index.ts
index 60d2438e..7f71ec74 100644
--- a/src/layout/components/comp-consumer.ts
+++ b/src/layouts/components/CompConsumer/index.ts
@@ -1,34 +1,33 @@
-import { useTagsViewStore } from "@/store/modules/tags-view"
-import type { VNode } from "vue"
-import { h } from "vue"
-import { KeepAlive, cloneVNode, createVNode, defineComponent } from "vue"
+import { type VNode, cloneVNode, createVNode, defineComponent, h, KeepAlive } from "vue"
import { useRoute } from "vue-router"
+import { useTagsViewStore } from "@/store/modules/tags-view"
+
interface CompConsumerProps {
- component?: VNode
+ component: VNode
}
+
const compMap = new Map()
+
export const CompConsumer = defineComponent(
(props: CompConsumerProps) => {
const tagsViewStore = useTagsViewStore()
const route = useRoute()
return () => {
const component = props.component
- // 判断当前是否包含name,如果不包含name,那就直接处理掉name
+ // 判断当前是否包含 name,如果不包含name,那就直接处理掉 name
if (!route.name) return component
- // 获取当前组件的name
- const compName = (component?.type as any)?.name
+ // 获取当前组件的 name
+ const compName = (component.type as any)?.name
const routeName = route.name as string
let Comp: VNode
if (compMap.has(routeName)) {
- // @ts-expect-error this is Node
- Comp = compMap.get(routeName)
+ Comp = compMap.get(routeName)!
} else {
- const node = cloneVNode(component!)
- if (compName && compName === routeName)
- // @ts-expect-error this is obj
- node.type.name = `__${compName}__` + "CUSTOM_NAME"
+ const node = cloneVNode(component)
+ if (compName && compName === routeName) {
+ ;(node.type as any).name = `__${compName}__CUSTOM_NAME`
+ }
// @ts-expect-error this is VNode
- // eslint-disable-next-line vue/one-component-per-file
Comp = defineComponent({
name: routeName,
setup() {
@@ -47,7 +46,6 @@ export const CompConsumer = defineComponent(
}
)
}
- // eslint-disable-next-line vue/one-component-per-file
},
{
name: "CompConsumer",