From: daiwei Date: Wed, 26 Nov 2025 06:05:28 +0000 (+0800) Subject: refactor(compiler-vapor): move `hasDeferredVShow` tracking to root IR X-Git-Tag: v3.6.0-alpha.6~32 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=8fa2a4b1cd150f33479e92cd3a2d1c584b2fae3f;p=thirdparty%2Fvuejs%2Fcore.git refactor(compiler-vapor): move `hasDeferredVShow` tracking to root IR --- diff --git a/packages/compiler-vapor/src/generate.ts b/packages/compiler-vapor/src/generate.ts index 8f6d03b9ac..ef516bf443 100644 --- a/packages/compiler-vapor/src/generate.ts +++ b/packages/compiler-vapor/src/generate.ts @@ -201,6 +201,9 @@ export function generate( `const ${setTemplateRefIdent} = ${context.helper('createTemplateRefSetter')}()`, ) } + if (ir.hasDeferredVShow) { + push(NEWLINE, `const deferredApplyVShows = []`) + } push(...genBlockContent(ir.block, context, true)) push(INDENT_END, NEWLINE) diff --git a/packages/compiler-vapor/src/generators/block.ts b/packages/compiler-vapor/src/generators/block.ts index 40fa8da632..97f7dd8f3b 100644 --- a/packages/compiler-vapor/src/generators/block.ts +++ b/packages/compiler-vapor/src/generators/block.ts @@ -43,10 +43,6 @@ export function genBlockContent( const { dynamic, effect, operation, returns, key } = block const resetBlock = context.enterBlock(block) - if (block.hasDeferredVShow) { - push(NEWLINE, `const deferredApplyVShows = []`) - } - if (root) { for (let name of context.ir.component) { const id = toValidAssetId(name, 'component') @@ -78,7 +74,7 @@ export function genBlockContent( push(...genOperations(operation, context)) push(...genEffects(effect, context, genEffectsExtraFrag)) - if (block.hasDeferredVShow) { + if (root && context.ir.hasDeferredVShow) { push(NEWLINE, `deferredApplyVShows.forEach(fn => fn())`) } diff --git a/packages/compiler-vapor/src/ir/index.ts b/packages/compiler-vapor/src/ir/index.ts index 115310bbda..f3ca992ce5 100644 --- a/packages/compiler-vapor/src/ir/index.ts +++ b/packages/compiler-vapor/src/ir/index.ts @@ -54,7 +54,6 @@ export interface BlockIRNode extends BaseIRNode { effect: IREffect[] operation: OperationNode[] returns: number[] - hasDeferredVShow: boolean } export interface RootIRNode { @@ -68,6 +67,7 @@ export interface RootIRNode { directive: Set block: BlockIRNode hasTemplateRef: boolean + hasDeferredVShow: boolean } export interface IfIRNode extends BaseIRNode { diff --git a/packages/compiler-vapor/src/transform.ts b/packages/compiler-vapor/src/transform.ts index be0efa6547..99d8ef2027 100644 --- a/packages/compiler-vapor/src/transform.ts +++ b/packages/compiler-vapor/src/transform.ts @@ -256,6 +256,7 @@ export function transform( directive: new Set(), block: newBlock(node), hasTemplateRef: false, + hasDeferredVShow: false, } const context = new TransformContext(ir, node, options) diff --git a/packages/compiler-vapor/src/transforms/utils.ts b/packages/compiler-vapor/src/transforms/utils.ts index b746999a18..f7d0594fe5 100644 --- a/packages/compiler-vapor/src/transforms/utils.ts +++ b/packages/compiler-vapor/src/transforms/utils.ts @@ -30,7 +30,6 @@ export const newBlock = (node: BlockIRNode['node']): BlockIRNode => ({ operation: [], returns: [], tempId: 0, - hasDeferredVShow: false, }) export function wrapTemplate(node: ElementNode, dirs: string[]): TemplateNode { diff --git a/packages/compiler-vapor/src/transforms/vShow.ts b/packages/compiler-vapor/src/transforms/vShow.ts index a60b20a71f..0c2e2bd9df 100644 --- a/packages/compiler-vapor/src/transforms/vShow.ts +++ b/packages/compiler-vapor/src/transforms/vShow.ts @@ -39,7 +39,7 @@ export const transformVShow: DirectiveTransform = (dir, node, context) => { ) if (shouldDeferred) { - context.parent!.parent!.block.hasDeferredVShow = true + context.ir.hasDeferredVShow = true } }