Skip to content

useAppendToBody

将组件根节点 reparent 到指定容器(默认 body),卸载时从 DOM 移除;等价于受控版 Teleport。

前置依赖

参数名类型说明
deps.vue.watchVue watch监听 rootRef,flush: 'post'
deps.vue.onBeforeUnmount生命周期卸载清理
deps.vue.toValue解包 MaybeRef读取 enabled
deps.getDefaultParent() => AppendHost | null通常 () => document.body

函数签名

typescript
function useAppendToBody(
  rootRef: Ref<AppendChildNode | null>,
  options: UseAppendToBodyOptions | undefined,
  deps: UseAppendToBodyDeps,
): void

interface UseAppendToBodyOptions {
  getParent?: () => AppendHost | null
  enabled?: MaybeRef<boolean>
}

参数

参数名类型必填说明
rootRefRef组件根 DOM 节点
options.getParentfunction覆盖默认挂载父节点
options.enabledboolean | Reffalse 时不 reparent

返回值

类型说明
void副作用 Hook,无返回值

工作原理

  1. watch(rootRef, move, { flush: 'post', immediate: true })
  2. enabled 为 true 且 parent 存在时,若节点不在 parent 下则 appendChild
  3. onBeforeUnmount 时若仍挂在 parent 上则 removeChild
  4. 不直接引用 document,由 getDefaultParent 注入。

异常

无异常抛出。