Vue:render函数
render函数
当我们创建完vue脚手架后,在main的js,有这么一段代码:
new Vue({
render: h => h(App),
}).$mount('#app')
})
上面一段代码是等同于下面:
new Vue({
el:'#app',
template:`<App></App>`,
components:{App},
})
那为什么要第1种写法呢?问题就在于引入的vue的js文件,如下:
import Vue from 'vue'
这个实际上引入的是vue.runtime.esm.js,是精简版的vue文件不含模板解析器(vue.js才是完整版),不含模板解析器是解析不了组件里的template属性值的
因此通过render的方式替代模板解析器的作用,但和其不同的是:在开发时存在,但最终打包后是不存在的,减少空间占用
render最完整的写法如下:
render(createElement){
// createElement是一个函数,用于创建标签元素。传入App帮我们创建App标签
return createElement(App);
}
总结:
1.vue.js与vue.runtime.xxx.js的区别:
(1).vue.js是完整版的Vue,包含:核心功能+模板解析器。
(2).vue.runtime.xxx.js是运行版的Vue,只包含:核心功能;没有模板解析器。
2.因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项,需要使用
render函数接收到的createElement函数去指定具体内容。