fix(keep-alive): avoid cache suspense comment root (#11479) 路 vuejs/core@a917c05 (original) (raw)

`@@ -8,6 +8,7 @@ import {

`

8

8

`KeepAlive,

`

9

9

`Suspense,

`

10

10

`type SuspenseProps,

`

``

11

`+

createCommentVNode,

`

11

12

`h,

`

12

13

`nextTick,

`

13

14

`nodeOps,

`

`@@ -2085,6 +2086,35 @@ describe('Suspense', () => {

`

2085

2086

`` expect(serializeInner(root)).toBe(<div>async2</div>)

``

2086

2087

`})

`

2087

2088

``

``

2089

`+

test('KeepAlive + Suspense + comment slot', async () => {

`

``

2090

`+

const toggle = ref(false)

`

``

2091

`+

const Async = defineAsyncComponent({

`

``

2092

`+

render() {

`

``

2093

`+

return h('div', 'async1')

`

``

2094

`+

},

`

``

2095

`+

})

`

``

2096

`+

const App = {

`

``

2097

`+

render() {

`

``

2098

`+

return h(KeepAlive, null, {

`

``

2099

`+

default: () => {

`

``

2100

`+

return h(Suspense, null, {

`

``

2101

`+

default: toggle.value ? h(Async) : createCommentVNode('v-if'),

`

``

2102

`+

})

`

``

2103

`+

},

`

``

2104

`+

})

`

``

2105

`+

},

`

``

2106

`+

}

`

``

2107

+

``

2108

`+

const root = nodeOps.createElement('div')

`

``

2109

`+

render(h(App), root)

`

``

2110

`` +

expect(serializeInner(root)).toBe(<!--v-if-->)

``

``

2111

+

``

2112

`+

toggle.value = true

`

``

2113

`+

await nextTick()

`

``

2114

`+

await Promise.all(deps)

`

``

2115

`` +

expect(serializeInner(root)).toBe(<div>async1</div>)

``

``

2116

`+

})

`

``

2117

+

2088

2118

`// #6416 follow up / #10017

`

2089

2119

`test('Suspense patched during HOC async component re-mount', async () => {

`

2090

2120

`const key = ref('k')

`