]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-vapor): prevent fragment `updated` hooks from running before the fragment...
authoredison <daiwei521@126.com>
Thu, 20 Nov 2025 14:11:41 +0000 (22:11 +0800)
committerGitHub <noreply@github.com>
Thu, 20 Nov 2025 14:11:41 +0000 (22:11 +0800)
packages/runtime-vapor/src/apiCreateFor.ts
packages/runtime-vapor/src/fragment.ts
packages/runtime-vapor/src/vdomInterop.ts

index 424e892c8939ca31984614ab18e492ffc99e9138..b1841f6dcb67d5604849ebe3a07063470cb5932e 100644 (file)
@@ -403,7 +403,7 @@ export const createFor = (
       oldBlocks = []
     }
 
-    if (frag.updated) frag.updated.forEach(m => m())
+    if (isMounted && frag.updated) frag.updated.forEach(m => m())
     setActiveSub(prevSub)
   }
 
index df4891c32865ec37f44588165c236e28e0a29359..96dcf6e7ddae7638802080dc655e929fa3e014c9 100644 (file)
@@ -191,7 +191,8 @@ export class DynamicFragment extends VaporFragment {
 
       if (parent) {
         insert(this.nodes, parent, this.anchor)
-        if (this.updated) {
+        // anchor isConnected indicates the this render is updated
+        if (this.anchor.isConnected && this.updated) {
           this.updated.forEach(hook => hook(this.nodes))
         }
       }
index 3c4a961f0c9004d9a1ea8d2fbcc012249d9c4c08..7f051e064f134bdafbcf5ed70a5cf2db583911f6 100644 (file)
@@ -383,7 +383,7 @@ function createVDOMComponent(
     }
 
     frag.nodes = vnode.el as any
-    if (frag.updated) frag.updated.forEach(m => m())
+    if (isMounted && frag.updated) frag.updated.forEach(m => m())
   }
 
   frag.remove = unmount
@@ -450,7 +450,7 @@ function renderVDOMSlot(
       }
     }
 
-    if (frag.updated) frag.updated.forEach(m => m())
+    if (isMounted && frag.updated) frag.updated.forEach(m => m())
   }
 
   const render = (parentNode?: ParentNode, anchor?: Node | null) => {