await timeout()
expect(serializeInner(root)).toBe('Bar')
})
+
+ // 11916
+ test('with KeepAlive + include', async () => {
+ const spy = vi.fn()
+ let resolve: (comp: Component) => void
+
+ const Foo = defineAsyncComponent(
+ () =>
+ new Promise(r => {
+ resolve = r as any
+ }),
+ )
+
+ const root = nodeOps.createElement('div')
+ const app = createApp({
+ render: () => h(KeepAlive, { include: 'Foo' }, [h(Foo)]),
+ })
+
+ app.mount(root)
+ await nextTick()
+
+ resolve!({
+ name: 'Foo',
+ setup() {
+ onActivated(spy)
+ return () => 'Foo'
+ },
+ })
+
+ await timeout()
+ expect(serializeInner(root)).toBe('Foo')
+ expect(spy).toBeCalledTimes(1)
+ })
})
import { ref } from '@vue/reactivity'
import { ErrorCodes, handleError } from './errorHandling'
import { isKeepAlive } from './components/KeepAlive'
-import { queueJob } from './scheduler'
import { markAsyncBoundary } from './helpers/useId'
import { type HydrationStrategy, forEachElement } from './hydrationStrategies'
if (instance.parent && isKeepAlive(instance.parent.vnode)) {
// parent is keep-alive, force update so the loaded component's
// name is taken into account
- queueJob(instance.parent.update)
+ instance.parent.update()
}
})
.catch(err => {