mirror of https://github.com/vuejs/core.git
fix(Transition): ensure the KeepAlive children unmount w/ out-in mode (#10632)
close #10620
This commit is contained in:
parent
53d15d3f76
commit
fc99e4d3f0
|
@ -7,6 +7,7 @@ import {
|
||||||
h,
|
h,
|
||||||
nextTick,
|
nextTick,
|
||||||
nodeOps,
|
nodeOps,
|
||||||
|
onUnmounted,
|
||||||
ref,
|
ref,
|
||||||
render,
|
render,
|
||||||
serialize,
|
serialize,
|
||||||
|
@ -768,6 +769,42 @@ describe('BaseTransition', () => {
|
||||||
test('w/ KeepAlive', async () => {
|
test('w/ KeepAlive', async () => {
|
||||||
await runTestWithKeepAlive(testOutIn)
|
await runTestWithKeepAlive(testOutIn)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
test('w/ KeepAlive + unmount innerChild', async () => {
|
||||||
|
const unmountSpy = vi.fn()
|
||||||
|
const includeRef = ref(['TrueBranch'])
|
||||||
|
const trueComp = {
|
||||||
|
name: 'TrueBranch',
|
||||||
|
setup() {
|
||||||
|
onUnmounted(unmountSpy)
|
||||||
|
const count = ref(0)
|
||||||
|
return () => h('div', count.value)
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
const toggle = ref(true)
|
||||||
|
const { props } = mockProps({ mode: 'out-in' }, true /*withKeepAlive*/)
|
||||||
|
const root = nodeOps.createElement('div')
|
||||||
|
const App = {
|
||||||
|
render() {
|
||||||
|
return h(BaseTransition, props, () => {
|
||||||
|
return h(
|
||||||
|
KeepAlive,
|
||||||
|
{ include: includeRef.value },
|
||||||
|
toggle.value ? h(trueComp) : h('div'),
|
||||||
|
)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
}
|
||||||
|
render(h(App), root)
|
||||||
|
|
||||||
|
// trigger toggle
|
||||||
|
toggle.value = false
|
||||||
|
includeRef.value = []
|
||||||
|
|
||||||
|
await nextTick()
|
||||||
|
expect(unmountSpy).toHaveBeenCalledTimes(1)
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
// #6835
|
// #6835
|
||||||
|
|
|
@ -254,7 +254,7 @@ const KeepAliveImpl: ComponentOptions = {
|
||||||
pendingCacheKey = null
|
pendingCacheKey = null
|
||||||
|
|
||||||
if (!slots.default) {
|
if (!slots.default) {
|
||||||
return null
|
return (current = null)
|
||||||
}
|
}
|
||||||
|
|
||||||
const children = slots.default()
|
const children = slots.default()
|
||||||
|
|
Loading…
Reference in New Issue