fix(runtime-core/refs): handle multiple merged refs for dynamic component with vnode
fix #2078
This commit is contained in:
@@ -6,7 +6,8 @@ import {
|
||||
nextTick,
|
||||
defineComponent,
|
||||
reactive,
|
||||
serializeInner
|
||||
serializeInner,
|
||||
shallowRef
|
||||
} from '@vue/runtime-test'
|
||||
|
||||
// reference: https://vue-composition-api-rfc.netlify.com/api.html#template-refs
|
||||
@@ -325,4 +326,43 @@ describe('api: template refs', () => {
|
||||
await nextTick()
|
||||
expect(spy.mock.calls[1][0]).toBe('p')
|
||||
})
|
||||
|
||||
// #2078
|
||||
test('handling multiple merged refs', async () => {
|
||||
const Foo = {
|
||||
render: () => h('div', 'foo')
|
||||
}
|
||||
const Bar = {
|
||||
render: () => h('div', 'bar')
|
||||
}
|
||||
|
||||
const viewRef = shallowRef<any>(Foo)
|
||||
const elRef1 = ref()
|
||||
const elRef2 = ref()
|
||||
|
||||
const App = {
|
||||
render() {
|
||||
if (!viewRef.value) {
|
||||
return null
|
||||
}
|
||||
const view = h(viewRef.value, { ref: elRef1 })
|
||||
return h(view, { ref: elRef2 })
|
||||
}
|
||||
}
|
||||
const root = nodeOps.createElement('div')
|
||||
render(h(App), root)
|
||||
|
||||
expect(serializeInner(elRef1.value.$el)).toBe('foo')
|
||||
expect(elRef1.value).toBe(elRef2.value)
|
||||
|
||||
viewRef.value = Bar
|
||||
await nextTick()
|
||||
expect(serializeInner(elRef1.value.$el)).toBe('bar')
|
||||
expect(elRef1.value).toBe(elRef2.value)
|
||||
|
||||
viewRef.value = null
|
||||
await nextTick()
|
||||
expect(elRef1.value).toBeNull()
|
||||
expect(elRef1.value).toBe(elRef2.value)
|
||||
})
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user