Skip to content

Commit

Permalink
fix(runtime-core): non-stable Fragment should always unmount its chil…
Browse files Browse the repository at this point in the history
…dren (#2445)

fix #2444
  • Loading branch information
HcySunYang authored Oct 20, 2020
1 parent 0227b4a commit fff62e2
Show file tree
Hide file tree
Showing 2 changed files with 48 additions and 1 deletion.
42 changes: 42 additions & 0 deletions packages/runtime-core/__tests__/rendererOptimizedMode.spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -475,4 +475,46 @@ describe('renderer: optimized mode', () => {
render(null, root)
expect(spy).toHaveBeenCalledTimes(1)
})

// #2444
// `KEYED_FRAGMENT` and `UNKEYED_FRAGMENT` always need to diff its children
test('non-stable Fragment always need to diff its children', () => {
const spyA = jest.fn()
const spyB = jest.fn()
const ChildA = {
setup() {
onBeforeUnmount(spyA)
return () => 'child'
}
}
const ChildB = {
setup() {
onBeforeUnmount(spyB)
return () => 'child'
}
}
const Parent = () => (
openBlock(),
createBlock('div', null, [
(openBlock(true),
createBlock(
Fragment,
null,
[createVNode(ChildA, { key: 0 })],
128 /* KEYED_FRAGMENT */
)),
(openBlock(true),
createBlock(
Fragment,
null,
[createVNode(ChildB)],
256 /* UNKEYED_FRAGMENT */
))
])
)
render(h(Parent), root)
render(null, root)
expect(spyA).toHaveBeenCalledTimes(1)
expect(spyB).toHaveBeenCalledTimes(1)
})
})
7 changes: 6 additions & 1 deletion packages/runtime-core/src/renderer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2038,7 +2038,12 @@ function baseCreateRenderer(
false,
true
)
} else if (!optimized && shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
} else if (
(type === Fragment &&
(patchFlag & PatchFlags.KEYED_FRAGMENT ||
patchFlag & PatchFlags.UNKEYED_FRAGMENT)) ||
(!optimized && shapeFlag & ShapeFlags.ARRAY_CHILDREN)
) {
unmountChildren(children as VNode[], parentComponent, parentSuspense)
}

Expand Down

0 comments on commit fff62e2

Please sign in to comment.