vue-router的顶级路由为什么创建了5个vue(最大的_uid=4)
问题描述
最近在看vue-router
源码的时候,发现了一个问题:项目里的第一个路由,启动的时候竟然已经创建了5个vue实例了。跟随着好奇心,对代码进行研究后发现结果:
vuex
创建了两个vue实例,剩下的三个请往下看。
项目是使用@vue/cli 4.4.6
创建的,引入了vue-router
和vuex
两个插件。
路由的定义如下图,只在route
s数组的顶层创建了login
组件,未使用children
来嵌套子组件。
const routes = [{
path: "/",
redirect:"login"
},
{
path: "/login",
name: "login",
component: login,
}]
问题是如何出现的
接着就是问题的起源,请看console
哟?啥情况,就进了第一个页面login,程序就创建了5个vue实例。明明这一个页面只需要一个vue实例。这五个是什么意思?
这5条console
是在项目的node_modules
文件夹中vue-router
中打出来的。vue-router中添加了一个beforeCreate
的混入,我是在学习到这块时发现的这个问题。在此mixin
中 console.log(this)
便可得到此五条内容。
尝试解决问题--5个实例分别是怎么产生的
_uid=3,4
其实看console
就可以看出来最后两个(_uid
=3,4)的实例产生的原因。 注意看一下两张图片的el
_uid=4
的vue实例挂载在class="appmain"
的div上
_uid=3
则对应的是id="app"
的div
<template>
<div id="app">
<router-view class="appmain" />
</div>
</template>
<script>
上面的代码在App.vue
文件中
由此可以看出来第4个vue
实例是父组件<div id="app">
产生的,
第5个vue
实例是子组件<router-view class="appmain" />
产生的。
_uid=2
那么第三个在哪呢?答案是在main.js
文件。
new Vue({
router,
store,
render: (h) => h(App),
}).$mount("#app");
此前我一直认为此处的new Vue({...}).$mount("#app")
产生的vue实例,和App.vue
文件中_uid=3的那个vue实例应该是同一个。因为这两个都挂载在了#app
上面。
官方文档中对$mount()
的解释:
如果 Vue 实例在实例化时没有收到 el 选项,则它处于“未挂载”状态,没有关联的 DOM 元素。可以使用
vm.$mount()
手动地挂载一个未挂载的实例。
从语义中分析,vm.$mount()
是vm实例去挂载另一个实例。所以猜测_uid=2
的实例是main.js
文件中创建的。
接下来对我的想法进行验证:
App.vue
<template>
<div id="app">
<router-view class="appmain" />
</div>
</template>
<script>
export default {
beforeCreate() {
console.log("-------------------");
console.log("App.vue");
console.log(this);
},
};
</script>
main.js
new Vue({
router,
store,
render: (h) => h(App),
beforeCreate(){
console.log("-------------------");
console.log('main.js')
console.log(this);
}
}).$mount("#app");
</script>
OK,下面是结果:
可以看到_uid=2
对应的就是main.js
上创建的实例。
_uid=0,1
这两个是vuex里创建的。忽然不想写了,就这样吧,想看自己去看。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhchgfik
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
excel下划线不显示怎么办
PHP中文网 06-23 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24