]> git.ipfire.org Git - thirdparty/vuejs/core.git/commitdiff
fix(runtime-core): disable tracking block in h function (#8213)
authoredison <daiwei521@126.com>
Tue, 2 Sep 2025 08:59:57 +0000 (16:59 +0800)
committerGitHub <noreply@github.com>
Tue, 2 Sep 2025 08:59:57 +0000 (16:59 +0800)
close #6913

packages/runtime-core/src/h.ts

index 93e7fd9bc8805712b0f27ac0586fc4b390fe16ea..ba4ebcb7f890099ca92057b28649dd29390f6b16 100644 (file)
@@ -7,6 +7,7 @@ import {
   type VNodeProps,
   createVNode,
   isVNode,
+  setBlockTracking,
 } from './vnode'
 import type { Teleport, TeleportProps } from './components/Teleport'
 import type { Suspense, SuspenseProps } from './components/Suspense'
@@ -201,18 +202,28 @@ export function h<P>(
 
 // Actual implementation
 export function h(type: any, propsOrChildren?: any, children?: any): VNode {
+  // #6913 disable tracking block in h function
+  const doCreateVNode = (type: any, props?: any, children?: any) => {
+    setBlockTracking(-1)
+    try {
+      return createVNode(type, props, children)
+    } finally {
+      setBlockTracking(1)
+    }
+  }
+
   const l = arguments.length
   if (l === 2) {
     if (isObject(propsOrChildren) && !isArray(propsOrChildren)) {
       // single vnode without props
       if (isVNode(propsOrChildren)) {
-        return createVNode(type, null, [propsOrChildren])
+        return doCreateVNode(type, null, [propsOrChildren])
       }
       // props without children
-      return createVNode(type, propsOrChildren)
+      return doCreateVNode(type, propsOrChildren)
     } else {
       // omit props
-      return createVNode(type, null, propsOrChildren)
+      return doCreateVNode(type, null, propsOrChildren)
     }
   } else {
     if (l > 3) {
@@ -220,6 +231,6 @@ export function h(type: any, propsOrChildren?: any, children?: any): VNode {
     } else if (l === 3 && isVNode(children)) {
       children = [children]
     }
-    return createVNode(type, propsOrChildren, children)
+    return doCreateVNode(type, propsOrChildren, children)
   }
 }