为什么vue中需要render

一,抛出问题

在最开始学习vue时,我们习惯性的使用如下写法:

    var em = new Vue({
    
    
      el: '#app',
      data: {
    
    
        name: 'zxd'
      }
    })

后面学习了脚手架后,就会发现,内部的写法变成了:

new Vue({
    
    
  render: h => h(App),
}).$mount('#app')

那么,这个render有什么用呢,这就是本节探索的内容。

二,带入一开始的写法看报错

new Vue({
    
    
  el: '#app',
  template: `<App></App>`,
  components: {
    
    App}
})

要探索render,我们则先不写render,写上原来的写法,看一看浏览器的报错:

vue.runtime.esm.js?c320:4605 [Vue warn]: 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.js是完整版的Vue,包含了核心功能+模板解析器,而vue.runtime.js是运行版本的vue,只包含核心功能,无模板解析器

因为vue.runtime.xxx.js没有模板解析器,所以不能使用template配置项。

而我们平时在生产过程中使用的不是完整版的vue.js。原因:使用完整版本的vue.js在项目完成后打包的内容会更大,更占空间,有很多冗余代码。

扫描二维码关注公众号,回复: 14974457 查看本文章

四,render是什么

当未使用render时,浏览器告诉我们是因为使用了不完整版本的vue所以无法正常运行。所以可以猜测,render的作用是为了弥补不完整版本vue.js的功能:模板解析。

那么,render是什么呢?render的本质是一个函数。

我们先把render写成一个函数,并返回一个值:

new Vue({
    
    
  el: '#app',
  render(h) {
    
    
    console.log(typeof h)
    return null
  }
})

在浏览器上运行可知,render函数会被调用且参数是一个function类型。

这个函数名字叫做createElement,用于为模板指定具体内容。

因为是形参,所以也可以写成字母,这里用h简写。

new Vue({
    
    
  el: '#app',
  render(createElement) {
    
    
    return createElement('h1','你好') 
  }
})

大家可以代入上述代码去实验,最后发现,页面出现的就是h1标签的你好。

五,render的简写

我们先把形参用h代替:

new Vue({
    
    
  el: '#app',
  render(h) {
    
    
    return h('h1','你好') 
  }
})

由于render中没有用到this,所以可以把render写成箭头函数(箭头函数this指向声明时所在的作用域下的this的值);由于只有一个参数,所以可以省略括号;由于只有一行代码,所以可以省略return,箭头后面的内容就是这一行代码,简写如下:

new Vue({
    
    
  render: h => h(App),
}).$mount('#app')

简写后就是一开始的写法了。

这里想带大家复习一下箭头函数的简写:

1.若形参只有一个,则小括号可以省略;
2.函数体只有一条语句,则花括号可以省略,函数的返回值为该条语句的执行结果;

后记

本篇博客讲述了render的写法,并未读者普及了vue文件的完整性以及复习了箭头函数的一些用法。

后期会产出更精品的内容,欢迎大家关注我!

猜你喜欢

转载自blog.csdn.net/zxdznyy/article/details/128626471
今日推荐