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.
}"
`;
-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
}).code
).toMatchSnapshot()
})
-
- test('hoist element with static ref', () => {
- const { root, args } = transformWithHoist(
- `<div><span ref="o"></span></div>`,
- {
- 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()
- })
})
})
expect(node.arguments[3]).toBe(genFlagText(PatchFlags.FULL_PROPS))
})
- test('NO NEED_PATCH (static ref)', () => {
+ test('NEED_PATCH (static ref)', () => {
const { node } = parseWithBind(`<div ref="foo" />`)
- 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)', () => {
const prop = props[i]
if (prop.type === NodeTypes.ATTRIBUTE) {
const { loc, name, value } = prop
+ if (name === 'ref') {
+ hasRef = true
+ }
properties.push(
createObjectProperty(
createSimpleExpression(