From: Evan You Date: Mon, 21 Oct 2019 19:17:29 +0000 (-0400) Subject: Revert "feat(compiler-core): hoist element with static ref (#344)" X-Git-Tag: v3.0.0-alpha.0~351 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=a0d570b16d49a304e550ce3105cd02bfc0b05ea4;p=thirdparty%2Fvuejs%2Fcore.git 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. --- 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(