createElement的tag值

来源:2-7 createElement

鸡肋2016

2019-03-19

老师你好
我有几个疑问 反复看了几遍没搞懂。很苦恼啊
一、在子组件(课程中是app子组件)实例化中执行createElement传入的tag值(即vnode的tag标签)是什么课程中是"<div id="app"><img/><helloWord/></div>"那么tag标签是div吗? 这个tag怎么取的啊
二、子组件app的“子类构造函数形成”、“安装勾子函数”、“实例化vnode”我都能理解
1、“子类构造函数形成”是在vue.component()方法中完成。
2、因为 <app/>是根Vue的根节点. 根Vue实例生成vnode时, 通过resolveAsset取得app子类构造函数, 再通过createComponent完成了“安装勾子函数”和“实例化vnode”。
问题:
根Vue实例patch时进行app实例初始化, 我知道因为配置合并能让vm.$options.components.helloWord能取到helloWord对象。
但是app实例通过createElement在进行生成vnode时, tag标签难道不是div而是helloWord(明明有根节点div, 还有一个img标签呢)? 要是app中有好几个子组件呢tag又是啥?
然后让“isDef(Ctor = resolveAsset(…, ‘components’, tag), 能取到helloWord对象, 再通过createComponent去完成helloWord的组件vnode。

写回答

1回答

ustbhuangyi

2019-03-19

一:在编译模板的时候,会解析到各个节点的 tag,在生成 render 函数的时候,作为参数传入,并最终传给 createElement 函数。
二:整个编译结果生成的 render 函数,返回的 vnode 其实是一个 vnode tree,从根节点开始,一层层的 vnode,包含了组件中的所有的节点。

等你学到编译章节了,这些东西都不难理解了,加油~

0
1
鸡肋2016
非常感谢!
2019-03-19
共1条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程