diff --git a/packages/runtime-core/__tests__/vnode.spec.ts b/packages/runtime-core/__tests__/vnode.spec.ts index 2ee1872afaa..0a08d4f3f5f 100644 --- a/packages/runtime-core/__tests__/vnode.spec.ts +++ b/packages/runtime-core/__tests__/vnode.spec.ts @@ -12,7 +12,7 @@ import { } from '../src/vnode' import { Data } from '../src/component' import { ShapeFlags, PatchFlags } from '@vue/shared' -import { h, reactive, isReactive } from '../src' +import { h, reactive, isReactive, setBlockTracking } from '../src' import { createApp, nodeOps, serializeInner } from '@vue/runtime-test' import { setCurrentRenderingInstance } from '../src/componentRenderUtils' @@ -535,6 +535,18 @@ describe('vnode', () => { expect(vnode.dynamicChildren).toStrictEqual([vnode1]) expect(vnode1.dynamicChildren).toStrictEqual([vnode2]) }) + + test('should not track openBlock() when tracking is disabled', () => { + let vnode1 + const vnode = (openBlock(), + createBlock('div', null, [ + setBlockTracking(-1), + (vnode1 = (openBlock(), createBlock('div'))), + setBlockTracking(1), + vnode1 + ])) + expect(vnode.dynamicChildren).toStrictEqual([]) + }) }) describe('transformVNodeArgs', () => { diff --git a/packages/runtime-core/src/vnode.ts b/packages/runtime-core/src/vnode.ts index de329ff9455..0c468fd06d5 100644 --- a/packages/runtime-core/src/vnode.ts +++ b/packages/runtime-core/src/vnode.ts @@ -235,7 +235,7 @@ export function createBlock( closeBlock() // a block is always going to be patched, so track it as a child of its // parent block - if (currentBlock) { + if (shouldTrack > 0 && currentBlock) { currentBlock.push(vnode) } return vnode