fix: handle prev children is null in patch element

This commit is contained in:
Evan You 2019-09-07 11:42:07 -04:00
parent 3904678306
commit 7950980dc3

View File

@ -760,6 +760,7 @@ export function createRenderer<
}
}
// children has 3 possibilities: text, array or no children.
if (shapeFlag & ShapeFlags.TEXT_CHILDREN) {
// text children fast path
if (prevShapeFlag & ShapeFlags.ARRAY_CHILDREN) {
@ -769,18 +770,8 @@ export function createRenderer<
hostSetElementText(container, c2 as string)
}
} else {
if (prevShapeFlag & ShapeFlags.TEXT_CHILDREN) {
hostSetElementText(container, '')
if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
mountChildren(
c2 as HostVNodeChildren,
container,
anchor,
parentComponent,
isSVG
)
}
} else if (prevShapeFlag & ShapeFlags.ARRAY_CHILDREN) {
if (prevShapeFlag & ShapeFlags.ARRAY_CHILDREN) {
// prev children was array
if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
// two arrays, cannot assume anything, do full diff
patchKeyedChildren(
@ -793,9 +784,25 @@ export function createRenderer<
optimized
)
} else {
// c2 is null in this case
// no new children, just unmount old
unmountChildren(c1 as HostVNode[], parentComponent, true)
}
} else {
// prev children was text OR null
// new children is array OR null
if (prevShapeFlag & ShapeFlags.TEXT_CHILDREN) {
hostSetElementText(container, '')
}
// mount new if array
if (shapeFlag & ShapeFlags.ARRAY_CHILDREN) {
mountChildren(
c2 as HostVNodeChildren,
container,
anchor,
parentComponent,
isSVG
)
}
}
}
}