Vuex namespaced
Vuex 命名空间
原帖 https://blog.csdn.net/lzb348110175/article/details/89387495
接上篇:组件中调用 Vuex 的 state,getters,mutations,actions,modules 的数据传递、传参问题
Vuex 由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
因此,Vuex 允许我们将 store 分割成模块(module),每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块。
默认情况下,模块内部的 action、mutation 和 getter 是注册在全局命名空间的,这样使得多个模块能够对同一 mutation 或 action 作出响应。如果希望你的模块具有更高的封装度和复用性,此时就用到了命名空间这个概念。
1.如何使模块成为一个命名空间模块?
你可以在单个模块中通过添加namespaced:true的方式使其成为带命名空间的模块。
1 |
|
2.组件中如何获取带有命名空间 moduleA 中的 state 数据?
1 |
|
获取 state 数据,与https://blog.csdn.net/lzb348110175/article/details/89351059 中的 1.State 中的取法一样
3.组件中调用命名空间模块中的 getters
1 |
|
11
}),
4.组件中调用命名空间模块中的 Mutations
1 |
|
5.组件中调用命名空间模块中的 Actions(与 mutations 一致)
1 |
|
备注:组件中如何对调用的 getters,mutations,actions 传参,没有发现辅助函数该如何传参,有待实践中继续研究,后续会有补充的…..补充中……补充中
6. 带命名空间的 moduleA,moduleB 模块中,如何获取根 store,当前模块,兄弟模块中的 action,mutations ,getters 方法?
7.在带命名空间的模块中,如何将 action 注册为全局 actions
两个条件:
① 添加 root: true
② 并将这个 action 的定义放在函数 handler 中
1
//storeAction 在命名空间 moduleA 中,但是它是一个全局 actions
1 |
|
8.当使用 mapState, mapGetters, mapActions 和 mapMutations 这些函数来绑定带命名空间的模块时,写起来可能比较繁琐,该怎么解决呢?
1 |
|
解决办法:对于这种情况,你可以将模块的空间名称字符串作为第一个参数传递给上述函数,这样所有绑定都会自动将该模块作为上下文。于是上面的例子可以简化为:
1 |
|
9.除了 8 中的将空间名称作为第一个参数传递外,还有其它别的方法吗?
你可以通过使用 createNamespacedHelpers 创建基于某个命名空间辅助函数。它返回一个对象,对象里有新的绑定在给定命名空间值上的组件绑定辅助函数:
1
1 |
|
部分内容摘自 Vuex 官方文档:https://vuex.vuejs.org/zh/guide/modules.html
总结以上知识点,只为方便以后自己查看,也希望能够帮助到正在看这篇博文的你,全凭自己总结的,可能会有部分错误,希望大家能够理解,也希望大家能够评论指出,谢谢大家。
附:Vue 篇笔记目录:
4.vue-cli + webpack 搭建 Vue 开发环境
10.Vuex 组件中的 mapState、mapGetters、mapMutations、mapActions 等辅助函数
11.组件中调用 Vuex 的 state,getters,mutations,actions,modules 的数据传递、传参问题
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!