mirror of
https://gitee.com/vuejs/vue.git
synced 2024-11-30 02:57:43 +08:00
fix(core): fix sameVnode for async component (#11107)
Co-authored-by: mac2 <mac2@example.com>
This commit is contained in:
parent
e4dea59f84
commit
52608302e9
@ -34,7 +34,8 @@ const hooks = ['create', 'activate', 'update', 'remove', 'destroy']
|
||||
|
||||
function sameVnode (a, b) {
|
||||
return (
|
||||
a.key === b.key && (
|
||||
a.key === b.key &&
|
||||
a.asyncFactory === b.asyncFactory && (
|
||||
(
|
||||
a.tag === b.tag &&
|
||||
a.isComment === b.isComment &&
|
||||
@ -42,7 +43,6 @@ function sameVnode (a, b) {
|
||||
sameInputType(a, b)
|
||||
) || (
|
||||
isTrue(a.isAsyncPlaceholder) &&
|
||||
a.asyncFactory === b.asyncFactory &&
|
||||
isUndef(b.asyncFactory.error)
|
||||
)
|
||||
)
|
||||
|
@ -1,4 +1,5 @@
|
||||
import Vue from 'vue'
|
||||
import { SSR_ATTR } from 'shared/constants'
|
||||
|
||||
describe('vdom patch: edge cases', () => {
|
||||
// exposed by #3406
|
||||
@ -432,4 +433,22 @@ describe('vdom patch: edge cases', () => {
|
||||
expect(vm.$el.textContent).not.toMatch('Infinity')
|
||||
}).then(done)
|
||||
})
|
||||
|
||||
it('should not throw when hydrated pending async component is patched by v-if="false"', done => {
|
||||
const PendingAsyncComponent = () => new Promise(() => {})
|
||||
const ssrAsyncComponent = document.createElement('div')
|
||||
ssrAsyncComponent.setAttribute(SSR_ATTR, 'true')
|
||||
const vm = new Vue({
|
||||
data: {
|
||||
visible: true
|
||||
},
|
||||
components: {
|
||||
PendingAsyncComponent
|
||||
},
|
||||
template: '<pending-async-component v-if="visible"></pending-async-component>'
|
||||
}).$mount(ssrAsyncComponent)
|
||||
|
||||
vm.visible = false
|
||||
vm.$nextTick(done)
|
||||
})
|
||||
})
|
||||
|
Loading…
Reference in New Issue
Block a user