Vue.component
组件的声明定义
src/core/index.js
initGlobalAPI(Vue)定义了全局api里面的ASSET_TYPES = ['component','directive','filter']
initAssetRegisters(Vue)
遍历数组,Vue['component'] = 构造函数(使用exend方法,将传入的组件配置转换为构造函数VueComponent)
给Vue的options选项赋值
Vue.options.components.comp = VueComponent
组件的创建
首先创建的是根组件,首次_render()时,会得到整棵树的VNode结构
src/core/vdom/create-element.js
_render里面的h函数调用_createElement()
1普通标签直接创建vnode
2获取tag对应的组件构造函数,createComponent创建vnode
3installComponentHooks->组件实例化及挂载init钩子->里面定义了componentInstance创建组件实例方法->子组件挂载
以上是_render做的事
_update->patch()->createElm()->尝试创建组件createComponent,如果存在init钩子则执行它(执行实例创建和挂载),然后插入到父元素,元素属性创建
PS:创建过程是自上而下(先创建父节点,然后是子节点)
挂载过程是自下而上(先挂载子节点,然后挂载父节点,再批量操作显示在界面上)