From 8f6b5050518441a5047d128138da44f798836002 Mon Sep 17 00:00:00 2001 From: edison Date: Tue, 2 Sep 2025 16:59:57 +0800 Subject: [PATCH] fix(runtime-core): disable tracking block in h function (#8213) close #6913 --- packages/runtime-core/src/h.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/packages/runtime-core/src/h.ts b/packages/runtime-core/src/h.ts index 93e7fd9bc..ba4ebcb7f 100644 --- a/packages/runtime-core/src/h.ts +++ b/packages/runtime-core/src/h.ts @@ -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

( // 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) } } -- 2.47.3