diff --git a/packages/core/src/componentUtils.ts b/packages/core/src/componentUtils.ts index 76a1e3e0..d3140581 100644 --- a/packages/core/src/componentUtils.ts +++ b/packages/core/src/componentUtils.ts @@ -24,9 +24,8 @@ import { warn } from './warning' let currentVNode: VNode | null = null let currentContextVNode: VNode | null = null -export function createComponentInstance( - vnode: VNode, - Component: ComponentClass +export function createComponentInstance( + vnode: VNode ): ComponentInstance { // component instance creation is done in two steps. // first, `initializeComponentInstance` is called inside base component @@ -37,6 +36,7 @@ export function createComponentInstance( // always pass args in super() currentVNode = vnode currentContextVNode = vnode.contextVNode + const Component = vnode.tag as ComponentClass const instance = (vnode.children = new Component() as ComponentInstance) // then we finish the initialization by collecting properties set on the diff --git a/packages/core/src/createRenderer.ts b/packages/core/src/createRenderer.ts index 963432e0..b4e6f60e 100644 --- a/packages/core/src/createRenderer.ts +++ b/packages/core/src/createRenderer.ts @@ -11,11 +11,7 @@ import { Ref, VNodeChildren } from './vdom' -import { - ComponentInstance, - FunctionalComponent, - ComponentClass -} from './component' +import { ComponentInstance, FunctionalComponent } from './component' import { updateProps } from './componentProps' import { renderInstanceRoot, @@ -229,13 +225,7 @@ export function createRenderer(options: RendererOptions) { // kept-alive activateComponentInstance(vnode, container, endNode) } else { - mountComponentInstance( - vnode, - vnode.tag as ComponentClass, - container, - isSVG, - endNode - ) + mountComponentInstance(vnode, container, isSVG, endNode) } } @@ -1151,19 +1141,17 @@ export function createRenderer(options: RendererOptions) { function mountComponentInstance( vnode: VNode, - Component: ComponentClass, container: RenderNode | null, isSVG: boolean, endNode: RenderNode | null ): RenderNode { // a vnode may already have an instance if this is a compat call with // new Vue() - const instance = - (__COMPAT__ && (vnode.children as ComponentInstance)) || - createComponentInstance(vnode, Component) + const instance = ((__COMPAT__ && vnode.children) || + createComponentInstance(vnode as any)) as ComponentInstance // inject platform-specific unmount to keep-alive container - if ((Component as any)[KeepAliveSymbol] === true) { + if ((vnode.tag as any)[KeepAliveSymbol] === true) { ;(instance as any).$unmount = unmountComponentInstance } diff --git a/packages/vue/src/index.ts b/packages/vue/src/index.ts index 72fa6708..744d29b2 100644 --- a/packages/vue/src/index.ts +++ b/packages/vue/src/index.ts @@ -17,7 +17,7 @@ class Vue { // convert it to a class const Component = createComponentClassFromOptions(options || {}) const vnode = h(Component) - const instance = createComponentInstance(vnode, Component) + const instance = createComponentInstance(vnode) function mount(el: any) { const dom = typeof el === 'string' ? document.querySelector(el) : el