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 920773fc6b.
This commit is contained in:
Evan You 2019-10-21 15:17:29 -04:00
parent f85ba092ce
commit a0d570b16d
4 changed files with 6 additions and 62 deletions

View File

@ -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

View File

@ -677,42 +677,5 @@ describe('compiler: hoistStatic transform', () => {
}).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()
})
})
})

View File

@ -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(`<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)', () => {

View File

@ -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(