@opensig/opendesign
Version:
29 lines (28 loc) • 1.41 kB
TypeScript
import { Component, VNode, ComponentInternalInstance } from 'vue';
export type PublicChildT<T = {}> = {
uid: number;
getVNode: () => VNode;
} & T;
/**
* 按模板顺序维护指定类型后代组件的排序
*
* @description
* 在 Vue 中,当使用 Teleport 或动态注册组件时,子组件的渲染顺序可能与模板书写顺序不一致。
* 该 Hook 通过监听 DOM 节点变化,确保子组件始终按模板中的书写顺序排列。
*
* @param vm - 父组件实例
* @param childType - 需要排序的后代组件类型
*
* @note
* - 排序操作会在下一帧执行
* - SSR 环境下无法工作(依赖响应式变量触发重渲染)
* - 适用于需要严格保持子组件顺序的场景
*/
export declare const useSortedTeleportChildren: <T extends PublicChildT>(vm: ComponentInternalInstance, childType: Component | string) => {
children: import('vue').ShallowRef<T[], T[]>;
childMap: Record<string, T>;
addChild: (child: T) => void;
OTeleportWrapper: import('vue').DefineComponent<{}, () => VNode<import('vue').RendererNode, import('vue').RendererElement, {
[key: string]: any;
}>[] | undefined, {}, {}, {}, import('vue').ComponentOptionsMixin, import('vue').ComponentOptionsMixin, {}, string, import('vue').PublicProps, Readonly<{}> & Readonly<{}>, {}, {}, {}, {}, string, import('vue').ComponentProvideOptions, true, {}, any>;
};