vue实例的挂载过程

  • html为Vue实例提供模板
  • Vue实例挂载到模板上
  • Vue实例解析模板
  • 解析完渲染页面

两种挂载方式 el与$mount()方法

  • 这两种方式是等效的,后者方式更为灵活
  • $mount()方法是Vue原型身上的方法
  • 注意:vue实例与模板只能是一一对应的关系

render()函数

render()函数是干什么的?

render函数是是用来渲染页面的,render()方法有一个参数,该参数是一个函数,用于创建元素的,返回的最终结果就是展示出的最后样子

render:h=>h(App)
// 等价于以下代码
render(createElment) {
    return createElment(App)
  } 

render()函数与template的区别

我们都知道Vue实例渲染页面的第一步要解析模板,使用template就相当于将模板直接引入到了vue实例当中,导致必须使用vue内部的模板解析器进行解析,render()函数上面我们已经说了,它不具备解析模板的功能,可是为什么它不需要解析就可以渲染呢?原因是,一般这个render()函数一般用在webpack项目中,webpack中引入模板解析器了,就不需要用内置的vue的模板解析器了

总结:

  • render()函数自身没有解析模板的功能,它只负责将解析完的代码渲染到浏览器上,而且这个用法一般用在webpack项目中,webpack项目中会从外部引入插件解析模板
  • template相当是使用vue内部的解析器,这种用法一般用在script引入vue的项目中,实际开发中用的很少

vue的运行时版本与vue完整版

初学vue的小伙伴肯定对这个概念很不理解,可能在刚用脚手架你尝试用模板语法,结果报了个你看不懂的错误

You are using the runtime-only build of Vue where the template compiler is not available. Either pre-compile the templates into render functions, or use the compiler-included build.

然后查了下资料,说引入了运行时的vue版本,没有模板解析器,这下疑问更大的,运行时的vue版本是什么?为什么要有这个东西?直接将完整版引入不香?此时你甚至有这样的想法,‘鱿鱼须’是不是不懂vue,哈哈哈哈,实不相瞒这是我最初的想法!!!

  • 完整版的vue含有模板解析器
  • 运行时vue不含模板解析器

我们都知道,vue是一个运行时依赖,但是模板解析器确实一个开发时的依赖,用脚手架的package.json文件中我们可以找到它,这个插件叫vue-template-compiler,这个东西就相当于一个工具,解析完了就没用了,而且这个插件占100多kb,而vue的整个核心才占200多kb,所以引入完整版的vue意味着,最后打包好的项目带了一个开发时工具,这个东西完全用不到,这也与我们区分开发依赖与运行依赖的想法相违背,所以vue官方就将vue完整版拆开了,搞了一个运行时,而且脚手架中默认引入运行时的vue,这样最终打包就不含有这个用不到的解析器了

总结:

  • 为了将开发时与运行时依赖拆分开,所以引入了运行时,这样打包的最终项目距就不含多于的开发依赖了,这种方式一般用于脚手架和webpack项目
  • 对于用script引入vue的,一般引入完整版,这样可以直接使用

更多推荐

Vue实例挂载与render()函数,运行时vue与完整vue