vue学习笔记[3]

main.js里的一些疑问

这段时间正在尝试使用vue做一个小玩意,接触了vue-router,也接触了vuex。学习了一段时间后,我要从main.js开始梳理我的学习过程 。

使用vue大多会使用vue-cli来创建工程,那创建工程后,在根目录下的index.html里主要内容只有

<div id="app"></div>

然后,在main.js里是这样写的

// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'

Vue.config.productionTip = false

/* eslint-disable no-new */
new Vue({
  el: '#app',
  router,
  components: { App },
  template: '<App/>'
})

如果只看以上代码,没有对比网上其他示例代码的话,可能发现不了什么。但是如果对比其他代码,会发现有很多好玩的地方。比如我在网上的一些demo里发现,有些示例中new Vue()却写成这样

// 示例一
new Vue({
  el: '#app',
  router
})

而我按照这样写,得到却是空白页。

我不得不去看官方文档,来看这个图
生命周期图示

如果在new Vue()没有template选项,就会编译el及其后代元素。而我的index.html只有<div id="app"></div>所以显示为空白。

之后打开,示例一中的index.html却看到了

// 示例一
<div id="app">
<router-view></router-view>
</div>

看到这里我就大概明白,我为什么会得到一个空白页,而人家得到的却不是空白页了。原因在于人家在index.html就使用了router让页面得到了显示。

再来看第二个示例,main.js如下

// 示例二
new Vue({
  router,
  store,
  render: h => h(App) 
}).$mount('#app')

使用了render选项,h=>h(App)是什么?

我从思否上直接复制一段如下:

render: h => h(App) 是下面内容的缩写:

render: function (createElement) {
    return createElement(App);
}

进一步缩写为(ES6 语法):

render (createElement) {
    return createElement(App);
}

再进一步缩写为:

render (h){
    return h(App);
}

按照 ES6 箭头函数的写法,就得到了:

render: h => h(App);

Vue.js 里面的 createElement 函数,这个函数的作用就是生成一个 VNode节点,render 函数得到这个 VNode 节点之后,返回给 Vue.js 的 mount 函数,渲染成真实 DOM 节点,并挂载到根节点上。

关于$mount与el

我目前的理解是没有太大区别,都是挂载。

template 选项与render选项

现在还有一个问题是

  components: { App },
  template: '<App/>'

render: h=>h(App)

有什么区别?

来看官方文档 - 渲染函数 & JSX

Vue 推荐在绝大多数情况下使用 template 来创建你的 HTML。然而在一些场景中,你真的需要 JavaScript 的完全编程的能力,这就是 render 函数,它比 template 更接近编译器。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值