From a0d570b16d49a304e550ce3105cd02bfc0b05ea4 Mon Sep 17 00:00:00 2001 From: Evan You Date: Mon, 21 Oct 2019 15:17:29 -0400 Subject: [PATCH] Revert "feat(compiler-core): hoist element with static ref (#344)" Static refs still need to be tracked in dynamicChildren because unmount also takes the fast path when dynamicChildren is present, and all refs need to be properly unmounted. This reverts commit 920773fc6b082269e5c54a9c44609e6fd7dba5f3. --- .../__snapshots__/hoistStatic.spec.ts.snap | 17 --------- .../__tests__/transforms/hoistStatic.spec.ts | 37 ------------------- .../transforms/transformElement.spec.ts | 11 ++---- .../src/transforms/transformElement.ts | 3 ++ 4 files changed, 6 insertions(+), 62 deletions(-) diff --git a/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap b/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap index 267445b405..1bb57f3dee 100644 --- a/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap +++ b/packages/compiler-core/__tests__/transforms/__snapshots__/hoistStatic.spec.ts.snap @@ -169,23 +169,6 @@ return function render() { }" `; -exports[`compiler: hoistStatic transform prefixIdentifiers hoist element with static ref 1`] = ` -"const _Vue = Vue -const _createVNode = Vue.createVNode - -const _hoisted_1 = _createVNode(\\"span\\", { ref: \\"o\\" }) - -return function render() { - with (this) { - const { createVNode: _createVNode, createBlock: _createBlock, openBlock: _openBlock } = _Vue - - return (_openBlock(), _createBlock(\\"div\\", null, [ - _hoisted_1 - ])) - } -}" -`; - exports[`compiler: hoistStatic transform prefixIdentifiers hoist nested static tree with static interpolation 1`] = ` "const _Vue = Vue const _createVNode = Vue.createVNode diff --git a/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts b/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts index 719aee704d..1fb81f9317 100644 --- a/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts +++ b/packages/compiler-core/__tests__/transforms/hoistStatic.spec.ts @@ -677,42 +677,5 @@ describe('compiler: hoistStatic transform', () => { }).code ).toMatchSnapshot() }) - - test('hoist element with static ref', () => { - const { root, args } = transformWithHoist( - `
`, - { - prefixIdentifiers: true - } - ) - - expect(root.hoists.length).toBe(1) - expect(root.hoists).toMatchObject([ - { - type: NodeTypes.JS_CALL_EXPRESSION, - callee: CREATE_VNODE, - arguments: [ - `"span"`, - createObjectMatcher({ - ref: `o` - }) - ] - } - ]) - expect(args).toMatchObject([ - `"div"`, - `null`, - [ - { - type: NodeTypes.ELEMENT, - codegenNode: { - type: NodeTypes.SIMPLE_EXPRESSION, - content: `_hoisted_1` - } - } - ] - ]) - expect(generate(root).code).toMatchSnapshot() - }) }) }) diff --git a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts index b8ef7543b7..74b2cc878e 100644 --- a/packages/compiler-core/__tests__/transforms/transformElement.spec.ts +++ b/packages/compiler-core/__tests__/transforms/transformElement.spec.ts @@ -699,15 +699,10 @@ describe('compiler: element transform', () => { expect(node.arguments[3]).toBe(genFlagText(PatchFlags.FULL_PROPS)) }) - test('NO NEED_PATCH (static ref)', () => { + test('NEED_PATCH (static ref)', () => { const { node } = parseWithBind(`
`) - expect(node.arguments.length).toBe(2) - expect(node.arguments).toMatchObject([ - `"div"`, - createObjectMatcher({ - ref: `foo` - }) - ]) + expect(node.arguments.length).toBe(4) + expect(node.arguments[3]).toBe(genFlagText(PatchFlags.NEED_PATCH)) }) test('NEED_PATCH (dynamic ref)', () => { diff --git a/packages/compiler-core/src/transforms/transformElement.ts b/packages/compiler-core/src/transforms/transformElement.ts index 99f1c67527..646a51ce61 100644 --- a/packages/compiler-core/src/transforms/transformElement.ts +++ b/packages/compiler-core/src/transforms/transformElement.ts @@ -249,6 +249,9 @@ export function buildProps( const prop = props[i] if (prop.type === NodeTypes.ATTRIBUTE) { const { loc, name, value } = prop + if (name === 'ref') { + hasRef = true + } properties.push( createObjectProperty( createSimpleExpression( -- 2.47.3