useAppendToBody
将组件根节点 reparent 到指定容器(默认 body),卸载时从 DOM 移除;等价于受控版 Teleport。
前置依赖
| 参数名 | 类型 | 说明 |
|---|---|---|
deps.vue.watch | Vue 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>
}参数
| 参数名 | 类型 | 必填 | 说明 |
|---|---|---|---|
rootRef | Ref | 是 | 组件根 DOM 节点 |
options.getParent | function | 否 | 覆盖默认挂载父节点 |
options.enabled | boolean | Ref | 否 | false 时不 reparent |
返回值
| 类型 | 说明 |
|---|---|
void | 副作用 Hook,无返回值 |
工作原理
watch(rootRef, move, { flush: 'post', immediate: true })。enabled为 true 且 parent 存在时,若节点不在 parent 下则appendChild。onBeforeUnmount时若仍挂在 parent 上则removeChild。- 不直接引用
document,由getDefaultParent注入。
异常
无异常抛出。