refactor: mount doesn't have to return el

This commit is contained in:
Evan You 2018-10-02 12:15:08 -04:00
parent 5e988cc9fd
commit 0ae6d8ab8b

View File

@ -177,20 +177,18 @@ export function createRenderer(options: RendererOptions) {
parentComponent: MountedComponent | null,
isSVG: boolean,
endNode: RenderNode | RenderFragment | null
): RenderNode | RenderFragment {
) {
const { flags } = vnode
if (flags & VNodeFlags.ELEMENT) {
return mountElement(vnode, container, parentComponent, isSVG, endNode)
mountElement(vnode, container, parentComponent, isSVG, endNode)
} else if (flags & VNodeFlags.COMPONENT) {
return mountComponent(vnode, container, parentComponent, isSVG, endNode)
mountComponent(vnode, container, parentComponent, isSVG, endNode)
} else if (flags & VNodeFlags.TEXT) {
return mountText(vnode, container, endNode)
mountText(vnode, container, endNode)
} else if (flags & VNodeFlags.FRAGMENT) {
return mountFragment(vnode, container, parentComponent, isSVG, endNode)
mountFragment(vnode, container, parentComponent, isSVG, endNode)
} else if (flags & VNodeFlags.PORTAL) {
return mountPortal(vnode, container, parentComponent)
} else {
return platformCreateText('')
mountPortal(vnode, container, parentComponent)
}
}
@ -216,7 +214,7 @@ export function createRenderer(options: RendererOptions) {
parentComponent: MountedComponent | null,
isSVG: boolean,
endNode: RenderNode | RenderFragment | null
): RenderNode {
) {
const { flags, tag, data, children, childFlags, ref } = vnode
isSVG = isSVG || (flags & VNodeFlags.ELEMENT_SVG) > 0
const el = (vnode.el = platformCreateElement(tag as string, isSVG))
@ -253,7 +251,6 @@ export function createRenderer(options: RendererOptions) {
data.vnodeMounted(vnode)
})
}
return el
}
function mountRef(ref: Ref, el: RenderNode | MountedComponent) {
@ -268,7 +265,7 @@ export function createRenderer(options: RendererOptions) {
parentComponent: MountedComponent | null,
isSVG: boolean,
endNode: RenderNode | RenderFragment | null
): RenderNode | RenderFragment {
) {
let el: RenderNode | RenderFragment
const { flags, tag, data, slots } = vnode
if (flags & VNodeFlags.COMPONENT_STATEFUL) {
@ -295,12 +292,12 @@ export function createRenderer(options: RendererOptions) {
attrs,
render.inheritAttrs
))
el = vnode.el = mount(subTree, null, parentComponent, isSVG, endNode)
mount(subTree, null, parentComponent, isSVG, endNode)
el = vnode.el = subTree.el as RenderNode
}
if (container != null) {
insertOrAppend(container, el, endNode)
}
return el
}
function mountText(
@ -329,9 +326,8 @@ export function createRenderer(options: RendererOptions) {
})
const fragmentChildren = fragment.children
if (childFlags & ChildrenFlags.SINGLE_VNODE) {
fragmentChildren.push(
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[],
@ -346,7 +342,9 @@ export function createRenderer(options: RendererOptions) {
} else {
// ensure at least one children so that it can be used as a ref node
// during insertions
fragmentChildren.push(mountText(createTextVNode(''), container, endNode))
const vnode = createTextVNode('')
mountText(vnode, container, endNode)
fragmentChildren.push(vnode.el as RenderNode)
}
return fragment
}
@ -355,7 +353,7 @@ export function createRenderer(options: RendererOptions) {
vnode: VNode,
container: RenderNode | null,
parentComponent: MountedComponent | null
): RenderNode {
) {
const { tag, children, childFlags, ref } = vnode
const target = typeof tag === 'string' ? platformQuerySelector(tag) : tag
@ -383,7 +381,7 @@ export function createRenderer(options: RendererOptions) {
if (ref) {
mountRef(ref, target as RenderNode)
}
return (vnode.el = mountText(createTextVNode(''), container, null))
vnode.el = mountText(createTextVNode(''), container, null)
}
// patching ------------------------------------------------------------------
@ -690,10 +688,11 @@ export function createRenderer(options: RendererOptions) {
isSVG: boolean
) {
unmount(prevVNode)
mount(nextVNode, null, parentComponent, isSVG, null)
replaceChild(
container,
prevVNode.el as RenderNode | RenderFragment,
mount(nextVNode, null, parentComponent, isSVG, null)
nextVNode.el as RenderNode
)
}
@ -1200,13 +1199,8 @@ export function createRenderer(options: RendererOptions) {
} else {
// this will be executed synchronously right here
instance.$vnode = renderInstanceRoot(instance)
parentVNode.el = mount(
instance.$vnode,
container,
instance,
isSVG,
endNode
)
mount(instance.$vnode, container, instance, isSVG, endNode)
parentVNode.el = instance.$vnode.el
instance._mounted = true
mountComponentInstanceCallbacks(instance, parentVNode.ref)
}