From: かっこかり <67428053+kakkokari-gtyih@users.noreply.github.com> Date: Wed, 7 Aug 2024 03:58:44 +0000 (+0900) Subject: fix(keep-alive): fix render error in cached is undefined (#11496) X-Git-Tag: v3.4.37~15 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=81351dc7fbdabcfa0f545f7d924c31a3c367e496;p=thirdparty%2Fvuejs%2Fcore.git fix(keep-alive): fix render error in cached is undefined (#11496) fix #11427 close #11431 --- diff --git a/packages/runtime-core/__tests__/components/Suspense.spec.ts b/packages/runtime-core/__tests__/components/Suspense.spec.ts index 62765dad98..65e801de27 100644 --- a/packages/runtime-core/__tests__/components/Suspense.spec.ts +++ b/packages/runtime-core/__tests__/components/Suspense.spec.ts @@ -2036,7 +2036,7 @@ describe('Suspense', () => { expect(serializeInner(root)).toBe(`
sync
`) }) - // #10899 + // #10899 / #11427 test('KeepAlive + Suspense switch before branch resolves', async () => { const Async1 = defineAsyncComponent({ render() { @@ -2053,14 +2053,20 @@ describe('Suspense', () => { const root = nodeOps.createElement('div') const App = { render() { - return h(KeepAlive, null, { - default: () => { - return h(Suspense, null, { - default: h(components[viewRef.value]), - fallback: h('div', 'loading'), - }) + return h( + KeepAlive, + { + max: 1, }, - }) + { + default: () => { + return h(Suspense, null, { + default: h(components[viewRef.value]), + fallback: h('div', 'loading'), + }) + }, + }, + ) }, } render(h(App), root) diff --git a/packages/runtime-core/src/components/KeepAlive.ts b/packages/runtime-core/src/components/KeepAlive.ts index 74cb1b1c12..8fe1088b26 100644 --- a/packages/runtime-core/src/components/KeepAlive.ts +++ b/packages/runtime-core/src/components/KeepAlive.ts @@ -206,7 +206,7 @@ const KeepAliveImpl: ComponentOptions = { function pruneCacheEntry(key: CacheKey) { const cached = cache.get(key) as VNode - if (!current || !isSameVNodeType(cached, current)) { + if (cached && (!current || !isSameVNodeType(cached, current))) { unmount(cached) } else if (current) { // current active instance should no longer be kept-alive.