docs: 完善 CompConsumer 组件注释

This commit is contained in:
pany 2023-09-22 17:34:52 +08:00
parent d20023b355
commit a36c560810

View File

@ -6,23 +6,35 @@ interface CompConsumerProps {
component: VNode component: VNode
} }
/** 定义 compMap 对象,用于存储路由名称和对应的组件 */
const compMap = new Map<string, VNode>() const compMap = new Map<string, VNode>()
/**
* CompConsumer
* <keep-alive> <CompConsumer :component="Component" />
* Name Name
* /info/1 /info/2
*/
export const CompConsumer = defineComponent( export const CompConsumer = defineComponent(
(props: CompConsumerProps) => { (props: CompConsumerProps) => {
const tagsViewStore = useTagsViewStore() const tagsViewStore = useTagsViewStore()
const route = useRoute() const route = useRoute()
return () => { return () => {
// 获取传入的组件
const component = props.component const component = props.component
// 判断当前是否包含 name如果不包含name那就直接处理掉 name // 判断当前是否包含 name如果不包含 name那就直接处理掉 name
if (!route.name) return component if (!route.name) return component
// 获取当前组件的 name // 获取当前组件的名称
const compName = (component.type as any)?.name const compName = (component.type as any)?.name
// 获取当前路由的名称
const routeName = route.name as string const routeName = route.name as string
let Comp: VNode let Comp: VNode
// 检查 compMap 中是否已经存在对应的组件
if (compMap.has(routeName)) { if (compMap.has(routeName)) {
// 如果存在,则直接使用该组件进行渲染
Comp = compMap.get(routeName)! Comp = compMap.get(routeName)!
} else { } else {
// 如果不存在,则克隆传入的组件并创建一个新的组件,将其添加到 compMap 中
const node = cloneVNode(component) const node = cloneVNode(component)
if (compName && compName === routeName) { if (compName && compName === routeName) {
;(node.type as any).name = `__${compName}__CUSTOM_NAME` ;(node.type as any).name = `__${compName}__CUSTOM_NAME`
@ -36,6 +48,7 @@ export const CompConsumer = defineComponent(
}) })
compMap.set(routeName, Comp) compMap.set(routeName, Comp)
} }
// 使用 createVNode 函数创建一个 KeepAlive 组件,并缓存 cachedViews 数组中对应的组件
return createVNode( return createVNode(
KeepAlive, KeepAlive,
{ {