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 267445b40..1bb57f3de 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 719aee704..1fb81f931 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 b8ef7543b..74b2cc878 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 99f1c6752..646a51ce6 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(