$store的挂载疑惑

来源:12-2 Vuex 初始化(1)

慕仔6385915

2019-08-28

老师,您好。在vuexInit函数中 是给每一个组件实例都分别执行一次beforeCreate来挂载KaTeX parse error: Expected 'EOF', got '的' at position 6: store的̲吧?假如options.sto…store,不存在的话,就向上父组件中找,组件的beforeCreate的执行顺序是由父到子,所以每个子组件都会从父组件中找到$store。我这么理解对吗?

有个疑问就是为什么要在每个组件中都判断进行挂载呢,不直接在根组件的beforeCreate中将$store挂载Vue.prototype中呢?

写回答

1回答

ustbhuangyi

2019-08-29

beforeCreate 只是它把 $store 注入到当前实例的原因,实际上 store 对象只在根组件,而子组件是通过递归的 parent 指针一层层往上找,直到找到根组件的 store。
store 如果直接挂在原型上会侵入了 Vue,并不好,因为没有规定 Vue 是单例的,一个页面存在多个 Vue 实例也是可以的,如果我想做多 store 的话,源码这种做法是可以支持的,但是如果直接挂到原型上就做不了了。

1
1
牛Plus
好像不是一层层递归,因为父组件先执行了 beforeCreate 从 父组件的父组件拿到了 $store,然后子组件执行 beforeCreate 从父组件拿到 $store,也就是new Vue的时候一定要传 store 的原因吧 - -
2020-07-01
共1条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程