expect(serializeInner(root)).toBe('<div>bar</div>')
})
+ test('multi reload child wrapped in Suspense + KeepAlive', async () => {
+ const id = 'test-child-reload-3'
+ const Child: ComponentOptions = {
+ __hmrId: id,
+ setup() {
+ const count = ref(0)
+ return { count }
+ },
+ render: compileToFunction(`<div>{{ count }}</div>`),
+ }
+ createRecord(id, Child)
+
+ const appId = 'test-app-id'
+ const App: ComponentOptions = {
+ __hmrId: appId,
+ components: { Child },
+ render: compileToFunction(`
+ <KeepAlive>
+ <Suspense>
+ <Child />
+ </Suspense>
+ </KeepAlive>
+ `),
+ }
+
+ const root = nodeOps.createElement('div')
+ render(h(App), root)
+ expect(serializeInner(root)).toBe('<div>0</div>')
+ await timeout()
+ reload(id, {
+ __hmrId: id,
+ setup() {
+ const count = ref(1)
+ return { count }
+ },
+ render: compileToFunction(`<div>{{ count }}</div>`),
+ })
+ await timeout()
+ expect(serializeInner(root)).toBe('<div>1</div>')
+
+ reload(id, {
+ __hmrId: id,
+ setup() {
+ const count = ref(2)
+ return { count }
+ },
+ render: compileToFunction(`<div>{{ count }}</div>`),
+ })
+ await timeout()
+ expect(serializeInner(root)).toBe('<div>2</div>')
+ })
+
test('rerender for nested component', () => {
const id = 'child-nested-rerender'
const Foo: ComponentOptions = {
if (
oldInnerChild &&
oldInnerChild.type !== Comment &&
- !isSameVNodeType(innerChild, oldInnerChild) &&
+ !isSameVNodeType(oldInnerChild, innerChild) &&
recursiveGetSubtree(instance).type !== Comment
) {
let leavingHooks = resolveTransitionHooks(
const { activeBranch, pendingBranch, isInFallback, isHydrating } = suspense
if (pendingBranch) {
suspense.pendingBranch = newBranch
- if (isSameVNodeType(newBranch, pendingBranch)) {
+ if (isSameVNodeType(pendingBranch, newBranch)) {
// same root type but content may have changed.
patch(
pendingBranch,
)
setActiveBranch(suspense, newFallback)
}
- } else if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {
+ } else if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {
// toggled "back" to current active branch
patch(
activeBranch,
}
}
} else {
- if (activeBranch && isSameVNodeType(newBranch, activeBranch)) {
+ if (activeBranch && isSameVNodeType(activeBranch, newBranch)) {
// root did not change, just normal patch
patch(
activeBranch,