mount.ts 552 B

12345678910111213141516171819202122
  1. import { reactive, markRaw } from "vue";
  2. import type { Component } from "vue";
  3. export type MInfo<T = any> = [HTMLDivElement, Component, Record<string, any> | undefined, T]
  4. export const needMounts: MInfo[] = reactive([])
  5. export const mount = <T>(
  6. to: HTMLDivElement,
  7. Component: Component,
  8. props?: Record<string, any>,
  9. ref?: (data: T) => void
  10. ) => {
  11. const info = [to, Component, props, ref] as MInfo
  12. markRaw(Component)
  13. needMounts.push(info)
  14. return () => {
  15. const ndx = needMounts.indexOf(info)
  16. needMounts.splice(ndx, 1)
  17. }
  18. };