import {
VNode,
MountedVNode,
- MountedVNodes,
RenderNode,
createTextVNode,
cloneVNode,
Ref,
- VNodeChildren,
- RenderFragment
+ VNodeChildren
} from './vdom'
import {
MountedComponent,
setText: (node: any, text: string) => void
appendChild: (parent: any, child: any) => void
insertBefore: (parent: any, child: any, ref: any) => void
- replaceChild: (parent: any, oldChild: any, newChild: any) => void
removeChild: (parent: any, child: any) => void
clearContent: (node: any) => void
parentNode: (node: any) => any
setText: platformSetText,
appendChild: platformAppendChild,
insertBefore: platformInsertBefore,
- replaceChild: platformReplaceChild,
removeChild: platformRemoveChild,
clearContent: platformClearContent,
parentNode: platformParentNode,
teardownVNode
} = options
- // Node operations (shimmed to handle virtual fragments) ---------------------
-
- function appendChild(container: RenderNode, el: RenderNode | RenderFragment) {
- if (el.$f) {
- for (let i = 0; i < el.children.length; i++) {
- appendChild(container, el.children[i])
- }
- } else {
- platformAppendChild(container, el)
- }
- }
-
- function insertBefore(
- container: RenderNode,
- el: RenderNode | RenderFragment,
- ref: RenderNode | RenderFragment
- ) {
- while (ref.$f) {
- ref = ref.children[0]
- }
- if (el.$f) {
- for (let i = 0; i < el.children.length; i++) {
- insertBefore(container, el.children[i], ref)
- }
- } else {
- platformInsertBefore(container, el, ref)
- }
- }
-
- function removeChild(container: RenderNode, el: RenderNode | RenderFragment) {
- if (el.$f) {
- for (let i = 0; i < el.children.length; i++) {
- removeChild(container, el.children[i])
- }
- } else {
- platformRemoveChild(container, el)
- }
- }
-
- function replaceChild(
- container: RenderNode,
- oldChild: RenderNode | RenderFragment,
- newChild: RenderNode | RenderFragment
- ) {
- if (oldChild.$f || newChild.$f) {
- insertOrAppend(container, newChild, oldChild)
- removeChild(container, oldChild)
- } else {
- platformReplaceChild(container, oldChild, newChild)
- }
- }
-
- function parentNode(el: RenderNode | RenderFragment): RenderNode {
- while (el.$f) {
- el = el.children[0]
- }
- return platformParentNode(el)
- }
-
function insertOrAppend(
container: RenderNode,
- newNode: RenderNode | RenderFragment,
- refNode: RenderNode | RenderFragment | null
+ newNode: RenderNode,
+ refNode: RenderNode | null
) {
if (refNode === null) {
- appendChild(container, newNode)
+ platformAppendChild(container, newNode)
} else {
- insertBefore(container, newNode, refNode)
+ platformInsertBefore(container, newNode, refNode)
}
}
- // lifecycle lifecycleHooks -----------------------------------------------------------
+ // Lifecycle Hooks -----------------------------------------------------------
const lifecycleHooks: Function[] = []
const vnodeUpdatedHooks: Function[] = []
container: RenderNode | null,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
const { flags } = vnode
if (flags & VNodeFlags.ELEMENT) {
container: RenderNode | null,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
for (let i = 0; i < children.length; i++) {
let child = children[i]
container: RenderNode | null,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
const { flags, tag, data, children, childFlags, ref } = vnode
isSVG = isSVG || (flags & VNodeFlags.ELEMENT_SVG) > 0
container: RenderNode | null,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
- let el: RenderNode | RenderFragment
const { flags, tag, data, slots } = vnode
if (flags & VNodeFlags.COMPONENT_STATEFUL) {
if (flags & VNodeFlags.COMPONENT_STATEFUL_KEPT_ALIVE) {
// kept-alive
- el = activateComponentInstance(vnode)
+ activateComponentInstance(vnode)
} else {
- el = mountComponentInstance(
+ mountComponentInstance(
vnode,
tag as ComponentClass,
- null,
+ container,
parentComponent,
isSVG,
endNode
attrs,
render.inheritAttrs
))
- mount(subTree, null, parentComponent, isSVG, endNode)
- el = vnode.el = subTree.el as RenderNode
- }
- if (container != null) {
- insertOrAppend(container, el, endNode)
+ mount(subTree, container, parentComponent, isSVG, endNode)
+ vnode.el = subTree.el as RenderNode
}
}
function mountText(
vnode: VNode,
container: RenderNode | null,
- endNode: RenderNode | RenderFragment | null
- ): RenderNode {
+ endNode: RenderNode | null
+ ) {
const el = (vnode.el = platformCreateText(vnode.children as string))
if (container != null) {
insertOrAppend(container, el, endNode)
}
- return el
}
function mountFragment(
container: RenderNode | null,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
- ): RenderFragment {
+ endNode: RenderNode | null
+ ) {
const { children, childFlags } = vnode
- const fragment: RenderFragment = (vnode.el = {
- $f: true,
- children: []
- })
- const fragmentChildren = fragment.children
- if (childFlags & ChildrenFlags.SINGLE_VNODE) {
- mount(children as VNode, container, parentComponent, isSVG, endNode)
- fragmentChildren.push((children as VNode).el as RenderNode)
- } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
- mountArrayChildren(
- children as VNode[],
- container,
- parentComponent,
- isSVG,
- endNode
- )
- for (let i = 0; i < (children as MountedVNodes).length; i++) {
- fragmentChildren.push((children as MountedVNodes)[i].el)
- }
- } else {
- // ensure at least one children so that it can be used as a ref node
- // during insertions
- const vnode = createTextVNode('')
- mountText(vnode, container, endNode)
- fragmentChildren.push(vnode.el as RenderNode)
+ switch (childFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ mount(children as VNode, container, parentComponent, isSVG, endNode)
+ vnode.el = (children as MountedVNode).el
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ const placeholder = createTextVNode('')
+ mountText(placeholder, container, null)
+ vnode.el = placeholder.el
+ break
+ default:
+ mountArrayChildren(
+ children as VNode[],
+ container,
+ parentComponent,
+ isSVG,
+ endNode
+ )
+ vnode.el = (children as MountedVNode[])[0].el
}
- return fragment
}
function mountPortal(
if (ref) {
mountRef(ref, target as RenderNode)
}
- vnode.el = mountText(createTextVNode(''), container, null)
+ const placeholder = createTextVNode('')
+ mountText(placeholder, container, null)
+ vnode.el = placeholder.el
}
// patching ------------------------------------------------------------------
}
function patch(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
container: RenderNode,
parentComponent: MountedComponent | null,
}
function patchElement(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
container: RenderNode,
parentComponent: MountedComponent | null,
return
}
- const el = (nextVNode.el = prevVNode.el) as RenderNode
+ const el = (nextVNode.el = prevVNode.el)
const prevData = prevVNode.data
const nextData = nextVNode.data
}
function patchComponent(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
container: RenderNode,
parentComponent: MountedComponent | null,
}
}
- function patchStatefulComponent(prevVNode: VNode, nextVNode: VNode) {
+ function patchStatefulComponent(prevVNode: MountedVNode, nextVNode: VNode) {
const { childFlags: prevChildFlags } = prevVNode
const {
data: nextData,
const instance = (nextVNode.children =
prevVNode.children) as MountedComponent
instance.$slots = nextSlots || EMPTY_OBJ
- instance.$parentVNode = nextVNode
+ instance.$parentVNode = nextVNode as MountedVNode
// Update props. This will trigger child update if necessary.
if (nextData !== null) {
}
function patchFunctionalComponent(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
container: RenderNode,
parentComponent: MountedComponent | null,
const { data: prevData, slots: prevSlots } = prevVNode
const { data: nextData, slots: nextSlots } = nextVNode
const render = nextVNode.tag as FunctionalComponent
- const prevTree = prevVNode.children as VNode
+ const prevTree = prevVNode.children as MountedVNode
let shouldUpdate = true
if (render.pure && prevSlots == null && nextSlots == null) {
}
function patchFragment(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
container: RenderNode,
parentComponent: MountedComponent | null,
) {
// determine the tail node of the previous fragment,
// then retrieve its next sibling to use as the end node for patchChildren.
- let prevElement = prevVNode.el as RenderNode | RenderFragment
- while (prevElement.$f) {
- prevElement = prevElement.children[prevElement.children.length - 1]
- }
- const { children, childFlags } = nextVNode
+ const endNode = platformNextSibling(getVNodeLastEl(prevVNode))
+ const { childFlags, children } = nextVNode
patchChildren(
prevVNode.childFlags,
childFlags,
container,
parentComponent,
isSVG,
- platformNextSibling(prevElement)
+ endNode
)
- nextVNode.el = prevVNode.el as RenderFragment
- const fragmentChildren: (
- | RenderNode
- | RenderFragment)[] = (nextVNode.el.children = [])
- if (childFlags & ChildrenFlags.SINGLE_VNODE) {
- fragmentChildren.push((children as MountedVNode).el)
- } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
- for (let i = 0; i < (children as MountedVNodes).length; i++) {
- fragmentChildren.push((children as MountedVNodes)[i].el)
+ switch (childFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ nextVNode.el = (children as MountedVNode).el
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ nextVNode.el = prevVNode.el
+ break
+ default:
+ nextVNode.el = (children as MountedVNode[])[0].el
+ }
+ }
+
+ function getVNodeLastEl(vnode: MountedVNode): RenderNode {
+ const { el, flags, children, childFlags } = vnode
+ if (flags & VNodeFlags.FRAGMENT) {
+ if (childFlags & ChildrenFlags.SINGLE_VNODE) {
+ return getVNodeLastEl(children as MountedVNode)
+ } else if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
+ return getVNodeLastEl(
+ (children as MountedVNode[])[(children as MountedVNode[]).length - 1]
+ )
+ } else {
+ return el
}
} else {
- fragmentChildren.push(mountText(createTextVNode(''), null, null))
+ return el
}
}
- function patchText(prevVNode: VNode, nextVNode: VNode) {
+ function patchText(prevVNode: MountedVNode, nextVNode: VNode) {
const el = (nextVNode.el = prevVNode.el) as RenderNode
const nextText = nextVNode.children
if (nextText !== prevVNode.children) {
}
function patchPortal(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
parentComponent: MountedComponent | null
) {
if (nextContainer !== prevContainer) {
switch (nextVNode.childFlags) {
case ChildrenFlags.SINGLE_VNODE:
- appendChild(nextContainer, (nextChildren as MountedVNode).el)
+ moveVNode(nextChildren as MountedVNode, nextContainer, null)
break
case ChildrenFlags.NO_CHILDREN:
break
default:
- for (let i = 0; i < (nextChildren as MountedVNodes).length; i++) {
- appendChild(nextContainer, (nextChildren as MountedVNodes)[i].el)
+ for (let i = 0; i < (nextChildren as MountedVNode[]).length; i++) {
+ moveVNode((nextChildren as MountedVNode[])[i], nextContainer, null)
}
break
}
}
function replaceVNode(
- prevVNode: VNode,
+ prevVNode: MountedVNode,
nextVNode: VNode,
container: RenderNode,
parentComponent: MountedComponent | null,
isSVG: boolean
) {
- unmount(prevVNode)
- mount(nextVNode, null, parentComponent, isSVG, null)
- replaceChild(
- container,
- prevVNode.el as RenderNode | RenderFragment,
- nextVNode.el as RenderNode
- )
+ const refNode = platformNextSibling(getVNodeLastEl(prevVNode))
+ removeVNode(prevVNode, container)
+ mount(nextVNode, container, parentComponent, isSVG, refNode)
}
function patchChildren(
container: RenderNode,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
switch (prevChildFlags) {
case ChildrenFlags.SINGLE_VNODE:
switch (nextChildFlags) {
case ChildrenFlags.SINGLE_VNODE:
patch(
- prevChildren as VNode,
+ prevChildren as MountedVNode,
nextChildren as VNode,
container,
parentComponent,
)
break
case ChildrenFlags.NO_CHILDREN:
- remove(prevChildren as VNode, container)
+ removeVNode(prevChildren as MountedVNode, container)
break
default:
- remove(prevChildren as VNode, container)
+ removeVNode(prevChildren as MountedVNode, container)
mountArrayChildren(
nextChildren as VNode[],
container,
default:
// MULTIPLE_CHILDREN
if (nextChildFlags === ChildrenFlags.SINGLE_VNODE) {
- removeAll(prevChildren as MountedVNodes, container, endNode)
+ removeChildren(prevChildren as MountedVNode[], container, endNode)
mount(
nextChildren as VNode,
container,
endNode
)
} else if (nextChildFlags === ChildrenFlags.NO_CHILDREN) {
- removeAll(prevChildren as MountedVNodes, container, endNode)
+ removeChildren(prevChildren as MountedVNode[], container, endNode)
} else {
const prevLength = (prevChildren as VNode[]).length
const nextLength = (nextChildren as VNode[]).length
)
}
} else if (nextLength === 0) {
- removeAll(prevChildren as MountedVNodes, container, endNode)
+ removeChildren(prevChildren as MountedVNode[], container, endNode)
} else if (
prevChildFlags === ChildrenFlags.KEYED_VNODES &&
nextChildFlags === ChildrenFlags.KEYED_VNODES
) {
patchKeyedChildren(
- prevChildren as VNode[],
+ prevChildren as MountedVNode[],
nextChildren as VNode[],
container,
prevLength,
)
} else {
patchNonKeyedChildren(
- prevChildren as VNode[],
+ prevChildren as MountedVNode[],
nextChildren as VNode[],
container,
prevLength,
}
function patchNonKeyedChildren(
- prevChildren: VNode[],
+ prevChildren: MountedVNode[],
nextChildren: VNode[],
container: RenderNode,
prevLength: number,
nextLength: number,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
const commonLength = prevLength > nextLength ? nextLength : prevLength
let i = 0
nextChildren[i] = nextChild = cloneVNode(nextChild)
}
patch(prevChild, nextChild, container, parentComponent, isSVG)
- prevChildren[i] = nextChild
+ prevChildren[i] = nextChild as MountedVNode
}
if (prevLength < nextLength) {
for (i = commonLength; i < nextLength; i++) {
}
} else if (prevLength > nextLength) {
for (i = commonLength; i < prevLength; i++) {
- remove(prevChildren[i], container)
+ removeVNode(prevChildren[i], container)
}
}
}
function patchKeyedChildren(
- prevChildren: VNode[],
+ prevChildren: MountedVNode[],
nextChildren: VNode[],
container: RenderNode,
prevLength: number,
nextLength: number,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
) {
let prevEnd = prevLength - 1
let nextEnd = nextLength - 1
nextChildren[j] = nextVNode = cloneVNode(nextVNode)
}
patch(prevVNode, nextVNode, container, parentComponent, isSVG)
- prevChildren[j] = nextVNode
+ prevChildren[j] = nextVNode as MountedVNode
j++
if (j > prevEnd || j > nextEnd) {
break outer
nextChildren[nextEnd] = nextVNode = cloneVNode(nextVNode)
}
patch(prevVNode, nextVNode, container, parentComponent, isSVG)
- prevChildren[prevEnd] = nextVNode
+ prevChildren[prevEnd] = nextVNode as MountedVNode
prevEnd--
nextEnd--
if (j > prevEnd || j > nextEnd) {
}
} else if (j > nextEnd) {
while (j <= prevEnd) {
- remove(prevChildren[j++], container)
+ removeVNode(prevChildren[j++], container)
}
} else {
let prevStart = j
if (canRemoveWholeContent) {
canRemoveWholeContent = false
while (i > prevStart) {
- remove(prevChildren[prevStart++], container)
+ removeVNode(prevChildren[prevStart++], container)
}
}
if (pos > j) {
}
}
if (!canRemoveWholeContent && j > nextEnd) {
- remove(prevVNode, container)
+ removeVNode(prevVNode, container)
}
} else if (!canRemoveWholeContent) {
- remove(prevVNode, container)
+ removeVNode(prevVNode, container)
}
}
} else {
if (canRemoveWholeContent) {
canRemoveWholeContent = false
while (i > prevStart) {
- remove(prevChildren[prevStart++], container)
+ removeVNode(prevChildren[prevStart++], container)
}
}
nextVNode = nextChildren[j]
patch(prevVNode, nextVNode, container, parentComponent, isSVG)
patched++
} else if (!canRemoveWholeContent) {
- remove(prevVNode, container)
+ removeVNode(prevVNode, container)
}
} else if (!canRemoveWholeContent) {
- remove(prevVNode, container)
+ removeVNode(prevVNode, container)
}
}
}
// fast-path: if nothing patched remove all old and add all new
if (canRemoveWholeContent) {
- removeAll(prevChildren as MountedVNodes, container, endNode)
+ removeChildren(prevChildren as MountedVNode[], container, endNode)
mountArrayChildren(
nextChildren,
container,
pos = i + nextStart
nextVNode = nextChildren[pos]
nextPos = pos + 1
- insertOrAppend(
+ moveVNode(
+ nextVNode as MountedVNode,
container,
- nextVNode.el as RenderNode | RenderFragment,
nextPos < nextLength ? nextChildren[nextPos].el : endNode
)
} else {
}
}
+ function moveVNode(
+ vnode: MountedVNode,
+ container: RenderNode,
+ refNode: RenderNode | null
+ ) {
+ const { flags, childFlags, children } = vnode
+ if (flags & VNodeFlags.FRAGMENT) {
+ switch (childFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ moveVNode(children as MountedVNode, container, refNode)
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ break
+ default:
+ for (let i = 0; i < (children as MountedVNode[]).length; i++) {
+ moveVNode((children as MountedVNode[])[i], container, refNode)
+ }
+ }
+ } else {
+ insertOrAppend(container, vnode.el as RenderNode, refNode)
+ }
+ }
+
// unmounting ----------------------------------------------------------------
- function unmount(vnode: VNode) {
+ function unmount(vnode: MountedVNode) {
const { flags, data, children, childFlags, ref } = vnode
const isElement = flags & VNodeFlags.ELEMENT
if (isElement || flags & VNodeFlags.FRAGMENT) {
unmountComponentInstance(children as MountedComponent)
}
} else {
- unmount(children as VNode)
+ unmount(children as MountedVNode)
}
} else if (flags & VNodeFlags.PORTAL) {
if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
- removeAll(children as MountedVNodes, vnode.tag as RenderNode, null)
+ removeChildren(
+ children as MountedVNode[],
+ vnode.tag as RenderNode,
+ null
+ )
} else if (childFlags === ChildrenFlags.SINGLE_VNODE) {
- remove(children as VNode, vnode.tag as RenderNode)
+ removeVNode(children as MountedVNode, vnode.tag as RenderNode)
}
}
if (ref) {
function unmountChildren(children: VNodeChildren, childFlags: ChildrenFlags) {
if (childFlags & ChildrenFlags.MULTIPLE_VNODES) {
- unmountArrayChildren(children as VNode[])
+ unmountArrayChildren(children as MountedVNode[])
} else if (childFlags === ChildrenFlags.SINGLE_VNODE) {
- unmount(children as VNode)
+ unmount(children as MountedVNode)
}
}
- function unmountArrayChildren(children: VNode[]) {
+ function unmountArrayChildren(children: MountedVNode[]) {
for (let i = 0; i < children.length; i++) {
unmount(children[i])
}
}
- function remove(vnode: VNode, container: RenderNode) {
+ function removeVNode(vnode: MountedVNode, container: RenderNode) {
unmount(vnode)
- if (container && vnode.el) {
- removeChild(container, vnode.el)
- vnode.el = null
+ const { el, flags, children, childFlags } = vnode
+ if (container && el) {
+ if (flags & VNodeFlags.FRAGMENT) {
+ switch (childFlags) {
+ case ChildrenFlags.SINGLE_VNODE:
+ removeVNode(children as MountedVNode, container)
+ break
+ case ChildrenFlags.NO_CHILDREN:
+ platformRemoveChild(container, el)
+ break
+ default:
+ for (let i = 0; i < (children as MountedVNode[]).length; i++) {
+ removeVNode((children as MountedVNode[])[i], container)
+ }
+ }
+ } else {
+ platformRemoveChild(container, el)
+ }
+ ;(vnode as any).el = null
}
}
- function removeAll(
- children: MountedVNodes,
+ function removeChildren(
+ children: MountedVNode[],
container: RenderNode,
- ref: RenderNode | RenderFragment | null
+ refNode: RenderNode | null
) {
unmountArrayChildren(children)
- if (ref === null) {
+ if (refNode === null) {
platformClearContent(container)
} else {
for (let i = 0; i < children.length; i++) {
- removeChild(container, children[i].el as RenderNode | RenderFragment)
+ removeVNode(children[i], container)
}
}
}
container: RenderNode | null,
parentComponent: MountedComponent | null,
isSVG: boolean,
- endNode: RenderNode | RenderFragment | null
+ endNode: RenderNode | null
): RenderNode {
// a vnode may already have an instance if this is a compat call with
// new Vue()
return
}
if (instance._mounted) {
- updateComponentInstance(instance, container, isSVG)
+ updateComponentInstance(instance, isSVG)
} else {
// this will be executed synchronously right here
- instance.$vnode = renderInstanceRoot(instance)
+ instance.$vnode = renderInstanceRoot(instance) as MountedVNode
mount(instance.$vnode, container, instance, isSVG, endNode)
parentVNode.el = instance.$vnode.el
instance._mounted = true
}
}
- function updateComponentInstance(
- instance: MountedComponent,
- container: RenderNode | null,
- isSVG: boolean
- ) {
+ function updateComponentInstance(instance: MountedComponent, isSVG: boolean) {
const prevVNode = instance.$vnode
if (instance.beforeUpdate) {
instance.beforeUpdate.call(instance.$proxy, prevVNode)
}
- const nextVNode = (instance.$vnode = renderInstanceRoot(instance))
- container =
- container || parentNode(prevVNode.el as RenderNode | RenderFragment)
+ const nextVNode = (instance.$vnode = renderInstanceRoot(
+ instance
+ ) as MountedVNode)
+ const container = platformParentNode(prevVNode.el) as RenderNode
patch(prevVNode, nextVNode, container, instance, isSVG)
const el = nextVNode.el as RenderNode
// Keep Alive ----------------------------------------------------------------
- function activateComponentInstance(vnode: VNode): RenderNode {
+ function activateComponentInstance(vnode: VNode) {
const instance = vnode.children as MountedComponent
- const el = (vnode.el = instance.$el)
+ vnode.el = instance.$el
lifecycleHooks.push(() => {
callActivatedHook(instance, true)
})
- return el as RenderNode
}
function callActivatedHook(instance: MountedComponent, asRoot: boolean) {
patch(prevVNode, vnode, container, null, false)
container.vnode = vnode
} else {
- remove(prevVNode, container)
+ removeVNode(prevVNode, container)
container.vnode = null
}
}