fix(runtime-core): avoid mutating EMPTY_ARR when setting dev root (#2419)

also freeze EMPTY_ARR in dev

fix #2413
This commit is contained in:
被雨水过滤的空气
2020-10-20 06:08:54 +08:00
committed by GitHub
parent e894caf731
commit edd49dcab4
5 changed files with 21 additions and 8 deletions

View File

@@ -226,7 +226,7 @@ const getChildRoot = (
return [vnode, undefined]
}
const rawChildren = vnode.children as VNodeArrayChildren
const dynamicChildren = vnode.dynamicChildren as VNodeArrayChildren
const dynamicChildren = vnode.dynamicChildren
const childRoot = filterSingleRoot(rawChildren)
if (!childRoot) {
return [vnode, undefined]
@@ -235,10 +235,12 @@ const getChildRoot = (
const dynamicIndex = dynamicChildren ? dynamicChildren.indexOf(childRoot) : -1
const setRoot = (updatedRoot: VNode) => {
rawChildren[index] = updatedRoot
if (dynamicIndex > -1) {
dynamicChildren[dynamicIndex] = updatedRoot
} else if (dynamicChildren && updatedRoot.patchFlag > 0) {
dynamicChildren.push(updatedRoot)
if (dynamicChildren) {
if (dynamicIndex > -1) {
dynamicChildren[dynamicIndex] = updatedRoot
} else if (updatedRoot.patchFlag > 0) {
vnode.dynamicChildren = [...dynamicChildren, updatedRoot]
}
}
}
return [normalizeVNode(childRoot), setRoot]