]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
wip: vapor app.unmount + unmounted hooks
authorEvan You <evan@vuejs.org>
Sun, 8 Dec 2024 15:16:49 +0000 (23:16 +0800)
committerEvan You <evan@vuejs.org>
Sun, 8 Dec 2024 15:18:22 +0000 (23:18 +0800)
packages/runtime-vapor/src/apiCreateApp.ts
packages/runtime-vapor/src/component.ts

index 0611e5bd5c3aa8eafce1dd0c13fcf2f1f8486dff..4a140cf107593530589303c647704e41bd4377ae 100644 (file)
@@ -1,5 +1,10 @@
-import { insert } from './dom/node'
-import { type VaporComponent, createComponent } from './component'
+import {
+  type VaporComponent,
+  type VaporComponentInstance,
+  createComponent,
+  mountComponent,
+  unmountComponent,
+} from './component'
 import {
   type AppMountFn,
   type AppUnmountFn,
@@ -17,12 +22,12 @@ const mountApp: AppMountFn<ParentNode> = (app, container) => {
     container.textContent = ''
   }
   const instance = createComponent(app._component, app._props as RawProps)
-  insert(instance, container)
+  mountComponent(instance, container)
   return instance
 }
 
 const unmountApp: AppUnmountFn = app => {
-  // TODO
+  unmountComponent(app._instance as VaporComponentInstance, app._container)
 }
 
 export const createVaporApp: CreateAppFunction<
index 26dffd336b6b1cb9c2b68c1b2b96f8370e71ff75..74c2fa2d3b022b04bafaae03af3a022d7ea43454 100644 (file)
@@ -399,12 +399,12 @@ export function createComponentWithFallback(
 export function mountComponent(
   instance: VaporComponentInstance,
   parent: ParentNode,
-  anchor: Node | null | 0,
+  anchor?: Node | null | 0,
 ): void {
   if (!instance.isMounted) {
     if (instance.bm) invokeArrayFns(instance.bm)
     insert(instance.block, parent, anchor)
-    // queuePostFlushCb(() => {
+    // TODO queuePostFlushCb(() => {
     if (instance.m) invokeArrayFns(instance.m)
     instance.isMounted = true
     // })
@@ -415,7 +415,7 @@ export function mountComponent(
 
 export function unmountComponent(
   instance: VaporComponentInstance,
-  parent: ParentNode,
+  parent?: ParentNode,
 ): void {
   if (instance.isMounted && !instance.isUnmounted) {
     if (__DEV__ && instance.type.__hmrId) {
@@ -423,11 +423,15 @@ export function unmountComponent(
     }
     if (instance.bum) invokeArrayFns(instance.bum)
     instance.scope.stop()
-    // TODO invoke unmount recursively for children
-    remove(instance.block, parent)
-    // queuePostFlushCb(() => {
+    for (const c of instance.children) {
+      unmountComponent(c)
+    }
+    if (parent) remove(instance.block, parent)
+    // TODO queuePostFlushCb(() => {
     if (instance.um) invokeArrayFns(instance.um)
     instance.isUnmounted = true
     // })
+  } else if (parent) {
+    remove(instance.block, parent)
   }
 }